6080604052600280546001600160a01b031990811661dead17909155600380549091169055620000326009600a620007b8565b6200004190620f4240620007c9565b6004556200007b6064620000676002600454620004b860201b620010d21790919060201c565b6200054f60201b620011541790919060201c565b600555620000a16064620000676002600454620004b860201b620010d21790919060201c565b6006556032600b556000600c556000600d55620000ec600d54620000d8600c54600b546200059960201b620011961790919060201c565b6200059960201b620011961790919060201c565b600e556032600f556000601055600060115562000123601154620000d8601054600f546200059960201b620011961790919060201c565b60125562000144600f54600b546200059960201b620011961790919060201c565b60135562000165601054600c546200059960201b620011961790919060201c565b60145562000186601154600d546200059960201b620011961790919060201c565b601555620001ae601554620000d86013546014546200059960201b620011961790919060201c565b6016556001601a819055601b805461ffff191682179055601c819055601e805460ff19169091179055601f8054600160a01b60ff60a01b199091161790556004546200021290620186a0906200006790600a620004b8602090811b620010d217901c565b60205560286021556022805460ff191660011790553480156200023457600080fd5b50600080546001600160a01b031916339081178255815260016020818152604092839020805460ff1916909217909155601e8054747a250d5630b4cf539739df2c5dacb4c659f2488d00610100600160a81b03199091161790819055825163c45a015560e01b815292516101009091046001600160a01b03169263c45a01559260048083019391928290030181865afa158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc9190620007e3565b6040516364e329cb60e11b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201523060248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af11580156200035f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003859190620007e3565b601f80546001600160a01b039283166001600160a01b03199182161790915560048054306000908152600860209081526040808320601e8054610100908190048a1686529184528285209590955533845260098352818420805460ff199081166001908117909255600a90945291909320805490921617905560178054851673698f6e415d2e46c05dc54fd2a83043e3e579fc129081179091556018805486168217905560198054909516179093555490546200044a939290910490911690620005fc565b50601f5460045462000466916001600160a01b031690620005fc565b5060045433600081815260076020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000897565b600082600003620004cc5750600062000549565b6000620004da8385620007c9565b905082620004e985836200080e565b14620005465760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200054683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200066960201b60201c565b600080620005a8838562000831565b905083811015620005465760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200053d565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620006589086815260200190565b60405180910390a350600192915050565b600081836200068d5760405162461bcd60e51b81526004016200053d919062000847565b5060006200069c84866200080e565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006fc578160001904821115620006e057620006e0620006a5565b80851615620006ee57918102915b93841c9390800290620006c0565b509250929050565b600082620007155750600162000549565b81620007245750600062000549565b81600181146200073d5760028114620007485762000768565b600191505062000549565b60ff8411156200075c576200075c620006a5565b50506001821b62000549565b5060208310610133831016604e8410600b84101617156200078d575081810a62000549565b620007998383620006bb565b8060001904821115620007b057620007b0620006a5565b029392505050565b60006200054660ff84168362000704565b8082028115828204841417620005495762000549620006a5565b600060208284031215620007f657600080fd5b81516001600160a01b03811681146200054657600080fd5b6000826200082c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005495762000549620006a5565b600060208083528351808285015260005b81811015620008765785810183015185820160400152820162000858565b506000604082860101526040601f19601f8301168501019250505092915050565b6123dc80620008a76000396000f3fe6080604052600436106102295760003560e01c806375cb1bd111610123578063b6a5d7de116100ab578063f0b37c041161006f578063f0b37c04146106aa578063f2fde38b146106ca578063f887ea40146106ea578063fb1116021461070f578063fe9fbb801461072f57600080fd5b8063b6a5d7de146105f1578063c1f1b1b514610611578063d46980161461062f578063dd62ed3e1461064f578063ea3105d91461069557600080fd5b8063893d20e8116100f2578063893d20e81461055157806395d89b411461056f5780639d9241ec1461059b578063a8aa1b31146105b1578063a9059cbb146105d157600080fd5b806375cb1bd1146104e557806375f0a8741461050557806378109e54146105255780637d1db4a51461053b57600080fd5b8063313ce567116101b15780635c85974f116101755780635c85974f1461042e5780635d0044ca1461044e578063672434821461046e5780636ddd17131461048e57806370a08231146104af57600080fd5b8063313ce5671461038f578063364333f4146103ab578063571ac8b0146103c057806359927044146103e057806359b107b91461041857600080fd5b80630f683e90116101f85780630f683e90146102f657806318160ddd1461031657806323b872dd1461032b578063293230b81461034b5780632f54bf6e1461036057600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b3146102a45780630d075d9c146102d457600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b60205481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b506040805180820190915260148152735374726174746f6e204f616b6d6f6e7420496e6360601b60208201525b6040516102559190611db7565b3480156102b057600080fd5b506102c46102bf366004611e1d565b61074f565b6040519015158152602001610255565b3480156102e057600080fd5b506102f46102ef366004611e49565b6107bc565b005b34801561030257600080fd5b506102f4610311366004611e49565b61087b565b34801561032257600080fd5b5060045461024b565b34801561033757600080fd5b506102c4610346366004611e75565b610923565b34801561035757600080fd5b506102f4610a33565b34801561036c57600080fd5b506102c461037b366004611eb6565b6000546001600160a01b0391821691161490565b34801561039b57600080fd5b5060405160098152602001610255565b3480156103b757600080fd5b506102f4610ab7565b3480156103cc57600080fd5b506102c46103db366004611eb6565b610b1a565b3480156103ec57600080fd5b50601954610400906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561042457600080fd5b5061024b600e5481565b34801561043a57600080fd5b506102f4610449366004611ed3565b610b28565b34801561045a57600080fd5b506102f4610469366004611ed3565b610b7c565b34801561047a57600080fd5b506102f4610489366004611f38565b610bd0565b34801561049a57600080fd5b50601f546102c490600160a01b900460ff1681565b3480156104bb57600080fd5b5061024b6104ca366004611eb6565b6001600160a01b031660009081526007602052604090205490565b3480156104f157600080fd5b506102f4610500366004611fa4565b610e4b565b34801561051157600080fd5b50601854610400906001600160a01b031681565b34801561053157600080fd5b5061024b60065481565b34801561054757600080fd5b5061024b60055481565b34801561055d57600080fd5b506000546001600160a01b0316610400565b34801561057b57600080fd5b506040805180820190915260038152624f414b60e81b6020820152610297565b3480156105a757600080fd5b5061024b60125481565b3480156105bd57600080fd5b50601f54610400906001600160a01b031681565b3480156105dd57600080fd5b506102c46105ec366004611e1d565b610eaf565b3480156105fd57600080fd5b506102f461060c366004611eb6565b610ee1565b34801561061d57600080fd5b50601f546001600160a01b0316610400565b34801561063b57600080fd5b50601754610400906001600160a01b031681565b34801561065b57600080fd5b5061024b61066a366004611fef565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156106a157600080fd5b506102f4610f32565b3480156106b657600080fd5b506102f46106c5366004611eb6565b610f63565b3480156106d657600080fd5b506102f46106e5366004611eb6565b610fae565b3480156106f657600080fd5b50601e546104009061010090046001600160a01b031681565b34801561071b57600080fd5b506102f461072a36600461203d565b611044565b34801561073b57600080fd5b506102c461074a366004611eb6565b6110b4565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107aa9086815260200190565b60405180910390a35060015b92915050565b6107c5336110b4565b6107ea5760405162461bcd60e51b81526004016107e190612083565b60405180910390fd5b6096610800826107fa8686611196565b90611196565b111561080b57600080fd5b600b839055600c829055600d819055600f546108279084611196565b6013556010546108379083611196565b6014556011546108479082611196565b601555610858816107fa8585611196565b600e5560155460135460145461087392916107fa9190611196565b601655505050565b610884336110b4565b6108a05760405162461bcd60e51b81526004016107e190612083565b60966108b0826107fa8686611196565b11156108bb57600080fd5b600f83905560108290556011819055600b546108d79084611196565b601355600c546108e79083611196565b601455600d546108f79082611196565b601555610908816107fa8585611196565b60125560155460135460145461087392916107fa9190611196565b60006001600160a01b03841661094b5760405162461bcd60e51b81526004016107e1906120a8565b6001600160a01b0383166109715760405162461bcd60e51b81526004016107e1906120ed565b6004546001600160a01b038516600090815260086020908152604080832033845290915290205414610a1e576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526008825283812033825290915291909120546109f99184906111f5565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610a2984848461122f565b90505b9392505050565b6000546001600160a01b03163314610a5d5760405162461bcd60e51b81526004016107e190612130565b601b54610100900460ff1615610a7257600080fd5b601b805461ffff1916610100179055604051600081527f2b27db57e94e474754b17ad26b358efda13cbcf4a9bbbc7ec92de2926a941f349060200160405180910390a1565b60185460405147916000916001600160a01b0390911690620186a090849084818181858888f193505050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050505050565b60006107b68260045461074f565b610b31336110b4565b610b4d5760405162461bcd60e51b81526004016107e190612083565b600a811015610b5b57600080fd5b6103e881600454610b6c9190612166565b610b76919061217d565b60055550565b610b85336110b4565b610ba15760405162461bcd60e51b81526004016107e190612083565b600a811015610baf57600080fd5b6103e881600454610bc09190612166565b610bca919061217d565b60065550565b6000546001600160a01b03163314610bfa5760405162461bcd60e51b81526004016107e190612130565b6000838214610c5c5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016107e1565b60005b84811015610cb3576000848483818110610c7b57610c7b61219f565b90506020020135633b9aca00610c919190612166565b9050610c9d81846121b5565b9250508080610cab906121c8565b915050610c5f565b5033600090815260076020526040902054811115610d135760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f700000000060448201526064016107e1565b60005b84811015610e43576000848483818110610d3257610d3261219f565b90506020020135633b9aca00610d489190612166565b90508060076000898986818110610d6157610d6161219f565b9050602002016020810190610d769190611eb6565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610da591906121b5565b90915550503360009081526007602052604081208054839290610dc99084906121e1565b909155508790508683818110610de157610de161219f565b9050602002016020810190610df69190611eb6565b6001600160a01b0316336001600160a01b031660008051602061238783398151915283604051610e2891815260200190565b60405180910390a35080610e3b816121c8565b915050610d16565b505050505050565b610e54336110b4565b610e705760405162461bcd60e51b81526004016107e190612083565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b60008054336001600160a01b0390911603610ed657610ecf338484611533565b90506107b6565b610ecf33848461122f565b6000546001600160a01b03163314610f0b5760405162461bcd60e51b81526004016107e190612130565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610f3b336110b4565b610f575760405162461bcd60e51b81526004016107e190612083565b601e805460ff19169055565b6000546001600160a01b03163314610f8d5760405162461bcd60e51b81526004016107e190612130565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610fd85760405162461bcd60e51b81526004016107e190612130565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61104d336110b4565b6110695760405162461bcd60e51b81526004016107e190612083565b601f805460ff60a01b1916600160a01b8615150217905561108c6009600a6122d8565b6110969084612166565b6020556021919091556022805460ff19169115159190911790555050565b6001600160a01b031660009081526001602052604090205460ff1690565b6000826000036110e4575060006107b6565b60006110f08385612166565b9050826110fd858361217d565b14610a2c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107e1565b6000610a2c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611607565b6000806111a383856121b5565b905083811015610a2c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107e1565b600081848411156112195760405162461bcd60e51b81526004016107e19190611db7565b50600061122684866121e1565b95945050505050565b60006001600160a01b0384166112575760405162461bcd60e51b81526004016107e1906120a8565b6001600160a01b03831661127d5760405162461bcd60e51b81526004016107e1906120ed565b6001600160a01b03841660009081526001602052604090205460ff16806112bc57506001600160a01b03831660009081526001602052604090205460ff165b156112d3576112cc848484611533565b9050610a2c565b602254610100900460ff16156112ee576112cc848484611533565b6001600160a01b03841660009081526001602052604090205460ff1615801561133057506001600160a01b03831660009081526001602052604090205460ff16155b1561138357601b5460ff1615156001036113835760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107e1565b601e5460ff161561139957611399848484611635565b6113a38284611816565b156113b1576113b1826118d9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600790915291909120546114039184906111f5565b6001600160a01b03808616600090815260076020526040812092909255601f54858216911614806114415750601f546001600160a01b038681169116145b61144b5782611456565b611456858585611cc3565b6001600160a01b03851660009081526007602052604090205490915061147c9082611196565b6001600160a01b03808616600090815260076020526040902091909155601f54868216911614806114ba5750601f546001600160a01b038581169116145b80156114cf57506001600160a01b0384163014155b156114ed576001601a60008282546114e791906121b5565b90915550505b836001600160a01b0316856001600160a01b03166000805160206123878339815191528360405161152091815260200190565b60405180910390a3506001949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526007909152918220546115849184906111f5565b6001600160a01b0380861660009081526007602052604080822093909355908516815220546115b39083611196565b6001600160a01b038085166000818152600760205260409081902093909355915190861690600080516020612387833981519152906115f59086815260200190565b60405180910390a35060019392505050565b600081836116285760405162461bcd60e51b81526004016107e19190611db7565b506000611226848661217d565b6001600160a01b03831660009081526001602052604090205460ff1615801561166757506001600160a01b0382163014155b801561167c57506001600160a01b0383163014155b801561169657506002546001600160a01b03838116911614155b80156116b05750601f546001600160a01b03838116911614155b80156116ca57506018546001600160a01b03838116911614155b80156116e457506017546001600160a01b03838116911614155b15611785576001600160a01b03821660009081526007602052604090205460065461170f83836121b5565b11156117835760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107e1565b505b600554811115806117ae57506001600160a01b0383166000908152600a602052604090205460ff165b806117d157506001600160a01b0382166000908152600a602052604090205460ff165b6118115760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107e1565b505050565b60008042611831601c54601d5461119690919063ffffffff16565b601f54911191506001600160a01b03848116911614801561184f5750805b80156118635750602254610100900460ff16155b80156118785750601f54600160a01b900460ff165b8015611897575060208054306000908152600790925260409091205410155b80156118d157506118be60646118b8602154876110d290919063ffffffff16565b90611154565b3060009081526007602052604090205410155b949350505050565b6022805461ff001981166101001790915560009060ff166118fc57602054611916565b61191660646118b8602154856110d290919063ffffffff16565b9050602054811161192b57506020548061192d565b805b5060008060145411611940576000611960565b61196060026118b86016546118b8601454876110d290919063ffffffff16565b9050600061196e8383611d75565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106119a8576119a861219f565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106119f0576119f061219f565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815247926101009092049091169063791ac94790611a3f9086906000908790309042906004016122e7565b600060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b50505050600080611a878347611d7590919063ffffffff16565b905060008060145411611a9c57601654611ab7565b601454611ab790611aae906002611154565b60165490611d75565b60155490915015611b3f576000611add826118b8601554866110d290919063ffffffff16565b6019546040519192506001600160a01b031690620186a09083906000818181858888f193505050503d8060008114611b31576040519150601f19603f3d011682016040523d82523d6000602084013e611b36565b606091505b50600095505050505b8615611c40576000611b6560026118b8846118b8601454886110d290919063ffffffff16565b601e5460175460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350610100909104169063f305d71990839060c40160606040518083038185885af1158015611bdd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c029190612358565b505060408051838152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a1505b60135415611ca95760185460405147916001600160a01b031690620186a09083906000818181858888f193505050503d8060008114611c9b576040519150601f19603f3d011682016040523d82523d6000602084013e611ca0565b606091505b50600095505050505b505042601d5550506022805461ff00191690555050505050565b601f5460009081906001600160a01b03858116911614611ce557600e54611ce9565b6012545b90506000611cfd6103e86118b886856110d2565b30600090815260076020526040902054909150611d1a9082611196565b30600081815260076020526040908190209290925590516001600160a01b0388169060008051602061238783398151915290611d599085815260200190565b60405180910390a3611d6b8482611d75565b9695505050505050565b6000610a2c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506111f5565b600060208083528351808285015260005b81811015611de457858101830151858201604001528201611dc8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611e1a57600080fd5b50565b60008060408385031215611e3057600080fd5b8235611e3b81611e05565b946020939093013593505050565b600080600060608486031215611e5e57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611e8a57600080fd5b8335611e9581611e05565b92506020840135611ea581611e05565b929592945050506040919091013590565b600060208284031215611ec857600080fd5b8135610a2c81611e05565b600060208284031215611ee557600080fd5b5035919050565b60008083601f840112611efe57600080fd5b50813567ffffffffffffffff811115611f1657600080fd5b6020830191508360208260051b8501011115611f3157600080fd5b9250929050565b60008060008060408587031215611f4e57600080fd5b843567ffffffffffffffff80821115611f6657600080fd5b611f7288838901611eec565b90965094506020870135915080821115611f8b57600080fd5b50611f9887828801611eec565b95989497509550505050565b600080600060608486031215611fb957600080fd5b8335611fc481611e05565b92506020840135611fd481611e05565b91506040840135611fe481611e05565b809150509250925092565b6000806040838503121561200257600080fd5b823561200d81611e05565b9150602083013561201d81611e05565b809150509250929050565b8035801515811461203857600080fd5b919050565b6000806000806080858703121561205357600080fd5b61205c85612028565b9350602085013592506040850135915061207860608601612028565b905092959194509250565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107b6576107b6612150565b60008261219a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b808201808211156107b6576107b6612150565b6000600182016121da576121da612150565b5060010190565b818103818111156107b6576107b6612150565b600181815b8085111561222f57816000190482111561221557612215612150565b8085161561222257918102915b93841c93908002906121f9565b509250929050565b600082612246575060016107b6565b81612253575060006107b6565b816001811461226957600281146122735761228f565b60019150506107b6565b60ff84111561228457612284612150565b50506001821b6107b6565b5060208310610133831016604e8410600b84101617156122b2575081810a6107b6565b6122bc83836121f4565b80600019048211156122d0576122d0612150565b029392505050565b6000610a2c60ff841683612237565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123375784516001600160a01b031683529383019391830191600101612312565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561236d57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220174182cc414b559a667175abb607c5afbbe305cf1799edd022801843aef0c0ec64736f6c63430008110033