60806040525f600755601760085560176009555f600a555f600b556014600c556014600d556014600e555f600f555f6010555f6011556009600a6100439190610644565b610052906401f5806640610659565b6012556100616009600a610644565b610070906401f5806640610659565b60135561007f6009600a610644565b61008d9063fac03320610659565b60145561009c6009600a610644565b6100aa9063fac03320610659565b60159081556003601855601955601a805461ffff191690553480156100cd575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600680546001600160a01b0319163317905561012c6009600a610644565b61013b906461f313f880610659565b335f9081526001602081905260408220929092556003906101635f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260039093528183208054851660019081179091556017549091168352912080549092161790556101c03390565b6001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6101f76009600a610644565b610206906461f313f880610659565b60405190815260200160405180910390a3601680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556102669030906102526009600a610644565b610261906461f313f880610659565b610426565b60165f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102da9190610670565b6001600160a01b031663c9c653963060165f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610339573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035d9190610670565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156103a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103cb9190610670565b601780546001600160a01b0319166001600160a01b0392831690811782555f908152600460209081526040808320805460ff199081166001908117909255945490951683526003909152902080549091169091179055610696565b6001600160a01b03831661048d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166104ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610484565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561059c57815f19048211156105825761058261054e565b8085161561058f57918102915b93841c9390800290610567565b509250929050565b5f826105b25750600161063e565b816105be57505f61063e565b81600181146105d457600281146105de576105fa565b600191505061063e565b60ff8411156105ef576105ef61054e565b50506001821b61063e565b5060208310610133831016604e8410600b841016171561061d575081810a61063e565b6106278383610562565b805f190482111561063a5761063a61054e565b0290505b92915050565b5f61065260ff8416836105a4565b9392505050565b808202811582820484141761063e5761063e61054e565b5f60208284031215610680575f80fd5b81516001600160a01b0381168114610652575f80fd5b611a56806106a35f395ff3fe60806040526004361061013f575f3560e01c8063715018a6116100b3578063a9059cbb1161006d578063a9059cbb14610376578063bf474bed14610395578063dd62ed3e146103aa578063ec1f3f63146103ee578063f2fde38b1461040d578063f5b3c3bf1461042c575f80fd5b8063715018a6146102dc5780637d1db4a5146102f05780638a8c523c146103055780638da5cb5b146103195780638f9a55c01461033557806395d89b411461034a575f80fd5b806320800a001161010457806320800a001461020457806323b872dd14610218578063313ce5671461023757806349bd5a5e14610252578063573761981461028957806370a08231146102a8575f80fd5b806301ab6ee51461014a57806306fdde0314610160578063095ea7b31461019e5780630faee56f146101cd57806318160ddd146101f0575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5061015e61045a565b005b34801561016b575f80fd5b50604080518082019091526004815263426f626160e01b60208201525b6040516101959190611649565b60405180910390f35b3480156101a9575f80fd5b506101bd6101b8366004611692565b610517565b6040519015158152602001610195565b3480156101d8575f80fd5b506101e260155481565b604051908152602001610195565b3480156101fb575f80fd5b506101e261052d565b34801561020f575f80fd5b5061015e61054e565b348015610223575f80fd5b506101bd6102323660046116bc565b6105a6565b348015610242575f80fd5b5060405160098152602001610195565b34801561025d575f80fd5b50601754610271906001600160a01b031681565b6040516001600160a01b039091168152602001610195565b348015610294575f80fd5b5061015e6102a3366004611692565b61060d565b3480156102b3575f80fd5b506101e26102c23660046116fa565b6001600160a01b03165f9081526001602052604090205490565b3480156102e7575f80fd5b5061015e6106a5565b3480156102fb575f80fd5b506101e260125481565b348015610310575f80fd5b5061015e610716565b348015610324575f80fd5b505f546001600160a01b0316610271565b348015610340575f80fd5b506101e260135481565b348015610355575f80fd5b50604080518082019091526004815263424f424160e01b6020820152610188565b348015610381575f80fd5b506101bd610390366004611692565b61090a565b3480156103a0575f80fd5b506101e260145481565b3480156103b5575f80fd5b506101e26103c4366004611715565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156103f9575f80fd5b5061015e61040836600461174c565b610916565b348015610418575f80fd5b5061015e6104273660046116fa565b610963565b348015610437575f80fd5b506101bd6104463660046116fa565b60046020525f908152604090205460ff1681565b5f546001600160a01b0316331461048c5760405162461bcd60e51b815260040161048390611763565b60405180910390fd5b6104986009600a61188c565b6104a7906461f313f88061189a565b6012556104b66009600a61188c565b6104c5906461f313f88061189a565b6013557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6104f56009600a61188c565b610504906461f313f88061189a565b60405190815260200160405180910390a1565b5f610523338484610a4a565b5060015b92915050565b5f61053a6009600a61188c565b610549906461f313f88061189a565b905090565b6006546001600160a01b0316336001600160a01b03161461056d575f80fd5b6006546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156105a3573d5f803e3d5ffd5b50565b5f6105b2848484610b6d565b61060384336105fe856040518060600160405280602881526020016119f9602891396001600160a01b038a165f90815260026020908152604080832033845290915290205491906112ca565b610a4a565b5060019392505050565b6006546001600160a01b0316336001600160a01b03161461062c575f80fd5b60065460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af115801561067c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a091906118b1565b505050565b5f546001600160a01b031633146106ce5760405162461bcd60e51b815260040161048390611763565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b0316331461073f5760405162461bcd60e51b815260040161048390611763565b601754600160a01b900460ff16156107995760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610483565b6016546001600160a01b031663f305d71947306107ca816001600160a01b03165f9081526001602052604090205490565b5f806107dd5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610843573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061086891906118d0565b505060175460165460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156108bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e191906118b1565b50601a805461ff0019166101001790556017805460ff60a01b1916600160a01b17905543600755565b5f610523338484610b6d565b5f546001600160a01b0316331461093f5760405162461bcd60e51b815260040161048390611763565b6006546001600160a01b0316336001600160a01b03161461095e575f80fd5b600b55565b5f546001600160a01b0316331461098c5760405162461bcd60e51b815260040161048390611763565b6001600160a01b0381166109f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610483565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610aac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610483565b6001600160a01b038216610b0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610483565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bd15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610483565b6001600160a01b038216610c335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610483565b5f8111610c945760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610483565b5f80546001600160a01b03858116911614801590610cbf57505f546001600160a01b03848116911614155b1561118d57610cf06064610cea600c54600f5411610cdf57600854610ce3565b600a545b8590611302565b90611387565b90506007544303610d7a57601954435f9081526005602052604090205410610d5a5760405162461bcd60e51b815260206004820181905260248201527f457863656564732062757973206f6e2074686520666972737420626c6f636b2e6044820152606401610483565b435f908152600560205260408120805491610d74836118fb565b91905055505b6001600160a01b0384165f9081526004602052604090205460ff168015610daf57506016546001600160a01b03848116911614155b8015610dd357506001600160a01b0383165f9081526003602052604090205460ff16155b15610eb957601254821115610e2a5760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610483565b60135482610e4c856001600160a01b03165f9081526001602052604090205490565b610e569190611913565b1115610ea45760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610483565b600f8054905f610eb3836118fb565b91905055505b6001600160a01b0383165f9081526004602052604090205460ff16158015610ef957506001600160a01b0383165f9081526003602052604090205460ff16155b15610f785760135482610f20856001600160a01b03165f9081526001602052604090205490565b610f2a9190611913565b1115610f785760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610483565b6001600160a01b0383165f9081526004602052604090205460ff168015610fa857506001600160a01b0384163014155b15610fd557610fd26064610cea600d54600f5411610fc857600954610ce3565b600b548590611302565b90505b6001600160a01b0384165f9081526004602052604090205460ff1615801561101557506001600160a01b0383165f9081526004602052604090205460ff16155b801561102a57506001600160a01b0384163014155b1561103257505f5b305f90815260016020526040902054601a5460ff1615801561106b57506001600160a01b0384165f9081526004602052604090205460ff165b801561107e5750601a54610100900460ff165b801561108b575060145481115b801561109a5750600e54600f54115b15611108576011544311156110ae575f6010555b601854601054106110bd575f80fd5b6110da6110d5846110d0846015546113c8565b6113c8565b6113dc565b4780156110ea576110ea47611543565b60108054905f6110f9836118fb565b9091555050436011555061118b565b601a5460ff1615801561113257506001600160a01b0384165f9081526004602052604090205460ff165b80156111455750601a54610100900460ff165b8015611152575060145481115b80156111615750600e54600f54115b1561118b576111796110d5846110d0846015546113c8565b4780156111895761118947611543565b505b505b801561120557305f908152600160205260409020546111ac908261157e565b305f81815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111fc9085815260200190565b60405180910390a35b6001600160a01b0384165f9081526001602052604090205461122790836115dc565b6001600160a01b0385165f9081526001602052604090205561126a61124c83836115dc565b6001600160a01b0385165f908152600160205260409020549061157e565b6001600160a01b038085165f8181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6112b385856115dc565b60405190815260200160405180910390a350505050565b5f81848411156112ed5760405162461bcd60e51b81526004016104839190611649565b505f6112f98486611926565b95945050505050565b5f825f0361131157505f610527565b5f61131c838561189a565b9050826113298583611939565b146113805760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610483565b9392505050565b5f61138083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061161d565b5f8183116113d65782611380565b50919050565b601a805460ff191660011790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061141c5761141c611958565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611473573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611497919061196c565b816001815181106114aa576114aa611958565b6001600160a01b0392831660209182029290920101526016546114d09130911684610a4a565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac947906115089085905f90869030904290600401611987565b5f604051808303815f87803b15801561151f575f80fd5b505af1158015611531573d5f803e3d5ffd5b5050601a805460ff1916905550505050565b6006546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561157a573d5f803e3d5ffd5b5050565b5f8061158a8385611913565b9050838110156113805760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610483565b5f61138083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112ca565b5f818361163d5760405162461bcd60e51b81526004016104839190611649565b505f6112f98486611939565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03811681146105a3575f80fd5b5f80604083850312156116a3575f80fd5b82356116ae8161167e565b946020939093013593505050565b5f805f606084860312156116ce575f80fd5b83356116d98161167e565b925060208401356116e98161167e565b929592945050506040919091013590565b5f6020828403121561170a575f80fd5b81356113808161167e565b5f8060408385031215611726575f80fd5b82356117318161167e565b915060208301356117418161167e565b809150509250929050565b5f6020828403121561175c575f80fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156117e657815f19048211156117cc576117cc611798565b808516156117d957918102915b93841c93908002906117b1565b509250929050565b5f826117fc57506001610527565b8161180857505f610527565b816001811461181e576002811461182857611844565b6001915050610527565b60ff84111561183957611839611798565b50506001821b610527565b5060208310610133831016604e8410600b8410161715611867575081810a610527565b61187183836117ac565b805f190482111561188457611884611798565b029392505050565b5f61138060ff8416836117ee565b808202811582820484141761052757610527611798565b5f602082840312156118c1575f80fd5b81518015158114611380575f80fd5b5f805f606084860312156118e2575f80fd5b8351925060208401519150604084015190509250925092565b5f6001820161190c5761190c611798565b5060010190565b8082018082111561052757610527611798565b8181038181111561052757610527611798565b5f8261195357634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561197c575f80fd5b81516113808161167e565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156119d75784516001600160a01b0316835293830193918301916001016119b2565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f6067825874e3ce4e2859ca42a1bf34a0d10b601c6e622e2548671fa97bbdfa764736f6c63430008190033