6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326009600a620005b1565b6200004290633b9aca00620005c9565b600555620000536009600a620005b1565b620000629062e4e1c0620005c9565b600655620000736009600a620005b1565b620000829062e4e1c0620005c9565b6007556000600d556007600e556000600f5560036010556000601155601154600f54600d54600e54601054620000b99190620005e3565b620000c59190620005e3565b620000d19190620005e3565b620000dd9190620005e3565b60125560646013819055601481815560158290556016829055601c55601d556020805461ffff60a01b1916600160a81b17905560055461271090620001259061012c620005c9565b620001319190620005f9565b6021553480156200014157600080fd5b50600080546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022791906200061c565b600280546001600160a01b0319166001600160a01b03928316179055601e546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac91906200061c565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af1158015620002fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032491906200061c565b602080546001600160a01b039283166001600160a01b031991821681178355601f805483169091179055306000818152600984526040808220601e54871683528552808220600019905533808352600a8652818320805460ff199081166001908117909255601980548a1686528486208054831684179055601880548b1687528587208054841685179055848752600b8a52858720805484168517905589548b168752858720805484168517905581548b16875285872080548416851790558054909a168652848620805483168417905595855283852080549091169091179055601780548616821790558654851673f2d031e3cc852088d0035b459d8c662148b5e79d17909655825484168617909255601a8054841686179055601b8054909316851790925560055484835260089093528082208390555190917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200048e91815260200190565b60405180910390a362000647565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004f3578160001904821115620004d757620004d76200049c565b80851615620004e557918102915b93841c9390800290620004b7565b509250929050565b6000826200050c57506001620005ab565b816200051b57506000620005ab565b81600181146200053457600281146200053f576200055f565b6001915050620005ab565b60ff8411156200055357620005536200049c565b50506001821b620005ab565b5060208310610133831016604e8410600b841016171562000584575081810a620005ab565b620005908383620004b2565b8060001904821115620005a757620005a76200049c565b0290505b92915050565b6000620005c260ff841683620004fb565b9392505050565b8082028115828204841417620005ab57620005ab6200049c565b80820180821115620005ab57620005ab6200049c565b6000826200061757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200062f57600080fd5b81516001600160a01b0381168114620005c257600080fd5b61257a80620006576000396000f3fe60806040526004361061026b5760003560e01c80637d1db4a511610144578063ba08f418116100b6578063d78e139d1161007a578063d78e139d14610727578063dd62ed3e14610747578063ec7cd01a1461078d578063f2fde38b146107ad578063f6a78e17146107cd578063f887ea40146107e257600080fd5b8063ba08f41814610692578063ccf8c036146106b2578063cec10c11146106d2578063d148b74c146106f2578063d51ed1c81461070757600080fd5b8063918924761161010857806391892476146105c357806395d89b41146105e35780639acb773e14610612578063a8aa1b3114610632578063a9059cbb14610652578063b2bdfa7b1461067257600080fd5b80637d1db4a514610533578063893d20e8146105495780638a4068dd1461057b5780638a8c523c146105905780638da5cb5b146105a557600080fd5b8063313ce567116101dd5780636ddd1713116101a15780636ddd17131461047c57806370a082311461049d578063715018a6146104d3578063728607ba146104e857806377b54bad146104fd57806378109e541461051d57600080fd5b8063313ce567146103f657806341fb0d21146104125780634d07912a146104275780634e9f829d1461043c5780635d83e1d51461045c57600080fd5b8063095ea7b31161022f578063095ea7b3146103565780631161ae391461037657806318160ddd146103965780631df4ccfc146103ab57806323b872dd146103c15780632b112e49146103e157600080fd5b806304368f65146102775780630445b667146102995780630621472c146102c257806306fdde03146102f257806308fd3d051461033557600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611f9e565b610802565b005b3480156102a557600080fd5b506102af60215481565b6040519081526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611fe1565b610869565b60405190151581526020016102b9565b3480156102fe57600080fd5b506040805180820190915260118152702637b1b4102732b9b99026b7b739ba32b960791b60208201525b6040516102b99190611ffc565b34801561034157600080fd5b506020546102e290600160a01b900460ff1681565b34801561036257600080fd5b506102e261037136600461204a565b61087d565b34801561038257600080fd5b506102e2610391366004612066565b6108e9565b3480156103a257600080fd5b506005546102af565b3480156103b757600080fd5b506102af60125481565b3480156103cd57600080fd5b506102e26103dc366004612088565b6108fd565b3480156103ed57600080fd5b506102af6109bf565b34801561040257600080fd5b50604051600981526020016102b9565b34801561041e57600080fd5b50610297610a11565b34801561043357600080fd5b50610297610a4d565b34801561044857600080fd5b506102976104573660046120c4565b610af8565b34801561046857600080fd5b506102976104773660046120c4565b610b50565b34801561048857600080fd5b506020546102e290600160a81b900460ff1681565b3480156104a957600080fd5b506102af6104b8366004611fe1565b6001600160a01b031660009081526008602052604090205490565b3480156104df57600080fd5b50610297610ba8565b3480156104f457600080fd5b50610297610c1c565b34801561050957600080fd5b506102e261051836600461204a565b610c59565b34801561052957600080fd5b506102af60075481565b34801561053f57600080fd5b506102af60065481565b34801561055557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102b9565b34801561058757600080fd5b50610297610d59565b34801561059c57600080fd5b50610297610da4565b3480156105b157600080fd5b506000546001600160a01b0316610563565b3480156105cf57600080fd5b506102976105de3660046120dd565b610df4565b3480156105ef57600080fd5b506040805180820190915260068152654e455353494560d01b6020820152610328565b34801561061e57600080fd5b5061029761062d366004612120565b610eba565b34801561063e57600080fd5b50602054610563906001600160a01b031681565b34801561065e57600080fd5b506102e261066d36600461204a565b610f0f565b34801561067e57600080fd5b50600054610563906001600160a01b031681565b34801561069e57600080fd5b506102976106ad36600461216d565b610f1c565b3480156106be57600080fd5b506102976106cd366004612120565b610fb2565b3480156106de57600080fd5b506102976106ed366004612244565b61101a565b3480156106fe57600080fd5b50610297611055565b34801561071357600080fd5b506102af6107223660046120c4565b611089565b34801561073357600080fd5b506102976107423660046120c4565b6110d1565b34801561075357600080fd5b506102af610762366004612270565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561079957600080fd5b506102976107a8366004612120565b611120565b3480156107b957600080fd5b506102976107c8366004611fe1565b611175565b3480156107d957600080fd5b5061029761125f565b3480156107ee57600080fd5b50601e54610563906001600160a01b031681565b6000546001600160a01b031633146108355760405162461bcd60e51b815260040161082c906122a3565b60405180910390fd5b6020805460ff60a81b1916600160a81b841515021790556108586009600a6123d2565b61086290826123e1565b6021555050565b60006108778260001961087d565b92915050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108d89086815260200190565b60405180910390a350600192915050565b6000826108f583611089565b119392505050565b6001600160a01b0383166000908152600960209081526040808320338452909152812054600019146109aa576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526009825283812033825290915291909120546109859184906112c5565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b6109b58484846112ff565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610a0c906003546001600160a01b0316600090815260086020526040902054610a0690600554906116f2565b906116f2565b905090565b6000546001600160a01b03163314610a3b5760405162461bcd60e51b815260040161082c906122a3565b609660155560c860145561012c601655565b6000546001600160a01b03163314610a775760405162461bcd60e51b815260040161082c906122a3565b6000600d8190556002600e819055600f8290556010829055601182905581908190610aa290826123f8565b610aac91906123f8565b610ab691906123f8565b610ac091906123f8565b60125560646013819055601581905560145560006016556005546103e890610ae99060016123e1565b610af3919061240b565b602155565b6000546001600160a01b03163314610b225760405162461bcd60e51b815260040161082c906122a3565b6001811015610b3057600080fd5b606481600554610b4091906123e1565b610b4a919061240b565b60065550565b6000546001600160a01b03163314610b7a5760405162461bcd60e51b815260040161082c906122a3565b6001811015610b8857600080fd5b606481600554610b9891906123e1565b610ba2919061240b565b60075550565b6000546001600160a01b03163314610bd25760405162461bcd60e51b815260040161082c906122a3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c465760405162461bcd60e51b815260040161082c906122a3565b60c860155561012c6014556101f4601655565b336000908152600b602052604081205460ff16610c7557600080fd5b81600003610ce8576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce5919061242d565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610d35573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b89190612446565b336000908152600b602052604090205460ff16610d7557600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610da1573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610dce5760405162461bcd60e51b815260040161082c906122a3565b6020805460ff60a01b1916600160a01b17905561012c60158190556014556103e8601655565b6000546001600160a01b03163314610e1e5760405162461bcd60e51b815260040161082c906122a3565b600d8690556010859055600e849055600f8390556011829055610e4f82610e49858188818c8c611734565b90611734565b6012556013819055610e6260058261240b565b60125410610eb25760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e20323025000000604482015260640161082c565b505050505050565b6000546001600160a01b03163314610ee45760405162461bcd60e51b815260040161082c906122a3565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60006109b83384846112ff565b6000546001600160a01b03163314610f465760405162461bcd60e51b815260040161082c906122a3565b60005b8251811015610fad5781600c6000858481518110610f6957610f69612463565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610fa581612479565b915050610f49565b505050565b6000546001600160a01b03163314610fdc5760405162461bcd60e51b815260040161082c906122a3565b6001600160a01b039091166000908152600a60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b6000546001600160a01b031633146110445760405162461bcd60e51b815260040161082c906122a3565b601491909155601591909155601655565b6000546001600160a01b0316331461107f5760405162461bcd60e51b815260040161082c906122a3565b611087611793565b565b60006108776110966109bf565b602080546001600160a01b03166000908152600890915260409020546110cb906110c4906002905b90611bea565b8590611bea565b90611c6c565b601a5447906001600160a01b03166108fc60646110ee85856123e1565b6110f8919061240b565b6040518115909202916000818181858888f19350505050158015610fad573d6000803e3d6000fd5b6000546001600160a01b0316331461114a5760405162461bcd60e51b815260040161082c906122a3565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461119f5760405162461bcd60e51b815260040161082c906122a3565b6001600160a01b0381166112045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112895760405162461bcd60e51b815260040161082c906122a3565b6112956009600a6123d2565b6112a390633b9aca006123e1565b6007556112b26009600a6123d2565b6112c090633b9aca006123e1565b600655565b600081848411156112e95760405162461bcd60e51b815260040161082c9190611ffc565b5060006112f68486612492565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561134157506001600160a01b0383166000908152600c602052604090205460ff16155b61137d5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b604482015260640161082c565b60225460ff161561139a57611393848484611cae565b90506109b8565b6001600160a01b03841660009081526001602052604090205460ff161580156113dc57506001600160a01b03831660009081526001602052604090205460ff16155b1561143157602054600160a01b900460ff166114315760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604482015260640161082c565b6001600160a01b03841660009081526001602052604090205460ff1615801561146357506001600160a01b0383163014155b801561147d57506003546001600160a01b03848116911614155b801561149757506020546001600160a01b03848116911614155b80156114b15750601b546001600160a01b03848116911614155b80156114cb57506018546001600160a01b03848116911614155b80156114f057506001600160a01b0383166000908152600b602052604090205460ff16155b15611591576001600160a01b03831660009081526008602052604090205460075461151b84836123f8565b111561158f5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000606482015260840161082c565b505b61159b8483611d94565b6115a3611e01565b156115b0576115b0611793565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600890915291909120546116029184906112c5565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff168061164f57506001600160a01b0384166000908152600a602052604090205460ff165b6116635761165e858486611e57565b611665565b825b6001600160a01b03851660009081526008602052604090205490915061168b9082611734565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116df9085815260200190565b60405180910390a3506001949350505050565b60006109b883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112c5565b60008061174183856123f8565b9050838110156109b85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161082c565b6022805460ff19166001179055601c54601d546000916117b2916108e9565b6117be57600d546117c1565b60005b905060006117e560026110cb6012546110cb86602154611bea90919063ffffffff16565b905060006117fe826021546116f290919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061183857611838612463565b6001600160a01b03928316602091820292909201015260025482519116908290600190811061186957611869612463565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b81524792919091169063791ac947906118b39086906000908790309042906004016124a5565b600060405180830381600087803b1580156118cd57600080fd5b505af11580156118e1573d6000803e3d6000fd5b5050505060006118fa82476116f290919063ffffffff16565b9050600061191561190c886002611c6c565b601254906116f2565b9050600061192a60026110cb8481878d611bea565b90506000611947836110cb600e5487611bea90919063ffffffff16565b90506000611964846110cb60105488611bea90919063ffffffff16565b90506000611981856110cb600f5489611bea90919063ffffffff16565b9050600061199e866110cb6011548a611bea90919063ffffffff16565b6018546040519192506000916001600160a01b039091169086908381818185875af1925050503d80600081146119f0576040519150601f19603f3d011682016040523d82523d6000602084013e6119f5565b606091505b50506019546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611a45576040519150601f19603f3d011682016040523d82523d6000602084013e611a4a565b606091505b5050601a546040519192506001600160a01b0316908590600081818185875af1925050503d8060008114611a9a576040519150601f19603f3d011682016040523d82523d6000602084013e611a9f565b606091505b5050601b546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611aef576040519150601f19603f3d011682016040523d82523d6000602084013e611af4565b606091505b50909150508b15611bd157601e5460175460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015611b6f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b949190612516565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff191690555050505050505050505050565b600082600003611bfc57506000610877565b6000611c0883856123e1565b905082611c15858361240b565b146109b85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161082c565b60006109b883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f52565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611cff9184906112c5565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611d2e9083611734565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d829086815260200190565b60405180910390a35060019392505050565b60065481111580611dbd57506001600160a01b0382166000908152600b602052604090205460ff165b611dfd5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161082c565b5050565b6020546000906001600160a01b03163314801590611e22575060225460ff16155b8015611e375750602054600160a81b900460ff165b8015610a0c57505060215430600090815260086020526040902054101590565b601654602054600091906001600160a01b0390811690841603611e7d5750601454611e98565b6020546001600160a01b0390811690861603611e9857506015545b6000611ec56013546064611eac91906123e1565b6110cb846110be6012548a611bea90919063ffffffff16565b306000908152600860205260409020549091508190611ee49082611734565b30600081815260086020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f359085815260200190565b60405180910390a3611f4786836116f2565b979650505050505050565b60008183611f735760405162461bcd60e51b815260040161082c9190611ffc565b5060006112f6848661240b565b8015158114610da157600080fd5b8035611f9981611f80565b919050565b60008060408385031215611fb157600080fd5b8235611fbc81611f80565b946020939093013593505050565b80356001600160a01b0381168114611f9957600080fd5b600060208284031215611ff357600080fd5b6109b882611fca565b600060208083528351808285015260005b818110156120295785810183015185820160400152820161200d565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561205d57600080fd5b611fbc83611fca565b6000806040838503121561207957600080fd5b50508035926020909101359150565b60008060006060848603121561209d57600080fd5b6120a684611fca565b92506120b460208501611fca565b9150604084013590509250925092565b6000602082840312156120d657600080fd5b5035919050565b60008060008060008060c087890312156120f657600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561213357600080fd5b61213c83611fca565b9150602083013561214c81611f80565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561218057600080fd5b823567ffffffffffffffff8082111561219857600080fd5b818501915085601f8301126121ac57600080fd5b81356020828211156121c0576121c0612157565b8160051b604051601f19603f830116810181811086821117156121e5576121e5612157565b60405292835281830193508481018201928984111561220357600080fd5b948201945b838610156122285761221986611fca565b85529482019493820193612208565b96506122379050878201611f8e565b9450505050509250929050565b60008060006060848603121561225957600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561228357600080fd5b61228c83611fca565b915061229a60208401611fca565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561232957816000190482111561230f5761230f6122d8565b8085161561231c57918102915b93841c93908002906122f3565b509250929050565b60008261234057506001610877565b8161234d57506000610877565b8160018114612363576002811461236d57612389565b6001915050610877565b60ff84111561237e5761237e6122d8565b50506001821b610877565b5060208310610133831016604e8410600b84101617156123ac575081810a610877565b6123b683836122ee565b80600019048211156123ca576123ca6122d8565b029392505050565b60006109b860ff841683612331565b8082028115828204841417610877576108776122d8565b80820180821115610877576108776122d8565b60008261242857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561243f57600080fd5b5051919050565b60006020828403121561245857600080fd5b81516109b881611f80565b634e487b7160e01b600052603260045260246000fd5b60006001820161248b5761248b6122d8565b5060010190565b81810381811115610877576108776122d8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124f55784516001600160a01b0316835293830193918301916001016124d0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561252b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220968fc6c61ea6607e23a01a3f701148f9b13f53be0f32e994cba6a783b3b3193864736f6c63430008120033