0 txs
0 calls
constructor
constructor(address _token1Address, address _token2Address, string _name, address _feeRecipient)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
purefunction decimals() pure returns (uint8)
estimateShares
viewfunction estimateShares(uint256 _amountToken1, uint256 _amountToken2) view returns (uint256 _shares)
estimateSwap
viewfunction estimateSwap(uint256 _amountIn, uint256 _totalTokenIn, uint256 _totalTokenOut) view returns (uint256 amountIn, uint256 amountOut, uint256 creatorFee)
estimateWithdrawalAmounts
viewfunction estimateWithdrawalAmounts(uint256 _shares) view returns (uint256 amount1, uint256 amount2)
feeRecipient
viewfunction feeRecipient() view returns (address)
getPoolInfo
viewfunction getPoolInfo() view returns (tuple _poolInfo)
maxTrade
viewfunction maxTrade(uint256 _totalTokenOut) view returns (uint256 maxTradeAmount)
maxTradePercentage
viewfunction maxTradePercentage() view returns (uint16)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
protocolFee
viewfunction protocolFee() view returns (uint16)
symbol
viewfunction symbol() view returns (string)
token1
viewfunction token1() view returns (address)
token2
viewfunction token2() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalToken1
viewfunction totalToken1() view returns (uint256)
totalToken2
viewfunction totalToken2() view returns (uint256)
tradeFee
viewfunction tradeFee() view returns (uint16)
addLiquidity
nonpayablefunction addLiquidity(uint256 _amountToken1, uint256 _amountToken2) returns (bool)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeeRecipient
nonpayablefunction setFeeRecipient(address _newRecipient) returns (bool)
setMaxTradePercentage
nonpayablefunction setMaxTradePercentage(uint16 _newTradePercentage) returns (bool)
setProtocolFee
nonpayablefunction setProtocolFee(uint16 _newProtocolFee) returns (bool)
setTradeFee
nonpayablefunction setTradeFee(uint16 _newTradeFee) returns (bool)
swap
nonpayablefunction swap(address _tokenIn, uint256 _amountIn, uint256 _minAmountOut) returns (bool)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawLiquidity
nonpayablefunction withdrawLiquidity(uint256 _shares) returns (bool)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
LiquidityWithdrawal
event LiquidityWithdrawal(address indexed user, uint256 amountToken1, uint256 amountToken2, uint256 shares, uint256 totalSupply)
NewFeeRecipient
event NewFeeRecipient(address indexed newRecipient)
NewLiquidity
event NewLiquidity(address indexed user, uint256 amountToken1, uint256 amountToken2, uint256 shares, uint256 totalSupply)
NewMaxTradePercentage
event NewMaxTradePercentage(address owner, uint16 newTradePercentage)
NewProtocolFee
event NewProtocolFee(address owner, uint16 newProtocolFee)
NewTradeFee
event NewTradeFee(address owner, uint16 newTradeFee)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Swap
event Swap(address indexed user, uint256 protocolFee, uint256 amountIn, uint256 amountOut)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
errors
No errors.
creation bytecode
0x60c0604052601e600860006101000a81548161ffff021916908361ffff1602179055506014600860026101000a81548161ffff021916908361ffff1602179055506103e8600860046101000a81548161ffff021916908361ffff1602179055503480156200006c57600080fd5b5060405162004fef38038062004fef833981810160405281019062000092919062000453565b81828160039081620000a591906200072f565b508060049081620000b791906200072f565b505050620000da620000ce6200018d60201b60201c565b6200019560201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505080600860066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000816565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200029c826200026f565b9050919050565b620002ae816200028f565b8114620002ba57600080fd5b50565b600081519050620002ce81620002a3565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200032982620002de565b810181811067ffffffffffffffff821117156200034b576200034a620002ef565b5b80604052505050565b6000620003606200025b565b90506200036e82826200031e565b919050565b600067ffffffffffffffff821115620003915762000390620002ef565b5b6200039c82620002de565b9050602081019050919050565b60005b83811015620003c9578082015181840152602081019050620003ac565b60008484015250505050565b6000620003ec620003e68462000373565b62000354565b9050828152602081018484840111156200040b576200040a620002d9565b5b62000418848285620003a9565b509392505050565b600082601f830112620004385762000437620002d4565b5b81516200044a848260208601620003d5565b91505092915050565b6000806000806080858703121562000470576200046f62000265565b5b60006200048087828801620002bd565b94505060206200049387828801620002bd565b935050604085015167ffffffffffffffff811115620004b757620004b66200026a565b5b620004c58782880162000420565b9250506060620004d887828801620002bd565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200053757607f821691505b6020821081036200054d576200054c620004ef565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000578565b620005c3868362000578565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006106200060a6200060484620005db565b620005e5565b620005db565b9050919050565b6000819050919050565b6200062c83620005ef565b620006446200063b8262000617565b84845462000585565b825550505050565b600090565b6200065b6200064c565b6200066881848462000621565b505050565b5b8181101562000690576200068460008262000651565b6001810190506200066e565b5050565b601f821115620006df57620006a98162000553565b620006b48462000568565b81016020851015620006c4578190505b620006dc620006d38562000568565b8301826200066d565b50505b505050565b600082821c905092915050565b60006200070460001984600802620006e4565b1980831691505092915050565b60006200071f8383620006f1565b9150826002028217905092915050565b6200073a82620004e4565b67ffffffffffffffff811115620007565762000755620002ef565b5b6200076282546200051e565b6200076f82828562000694565b600060209050601f831160018114620007a7576000841562000792578287015190505b6200079e858262000711565b8655506200080e565b601f198416620007b78662000553565b60005b82811015620007e157848901518255600182019150602085019450602081019050620007ba565b86831015620008015784890151620007fd601f891682620006f1565b8355505b6001600288020188555050505b505050505050565b60805160a05161473c620008b360003960008181610a4801528181610adc01528181610e52015281816110e5015281816113a90152818161143d015281816115b8015281816116a50152611713015260008181610966015281816109fa015281816110a9015281816112c5015281816113590152818161156301528181611649015281816116c6015281816116f20152611b93015261473c6000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a457c2d7116100ad578063d21220a71161007c578063d21220a71461066e578063dd62ed3e1461068c578063e4467f35146106bc578063e74b981b146106ec578063f2fde38b1461071c57610206565b8063a457c2d7146105d2578063a9059cbb14610602578063b0e21e8a14610632578063b57f272e1461065057610206565b806395d89b41116100e957806395d89b41146105245780639cd441da146105425780639f1d0f59146105725780639fdccfb8146105a257610206565b806370a08231146104ae578063715018a6146104de57806380abfda8146104e85780638da5cb5b1461050657610206565b806324bcdfbd1161019d578063469048401161016c57806346904840146103f45780634832cee11461041257806350e4a49a14610430578063574274411461046057806360246c881461049057610206565b806324bcdfbd1461036a57806325be124e14610388578063313ce567146103a657806339509351146103c457610206565b806313e026f9116101d957806313e026f9146102b957806318160ddd146102eb5780631d8addd31461030957806323b872dd1461033a57610206565b806306fdde031461020b5780630771d90914610229578063095ea7b3146102595780630a861f2a14610289575b600080fd5b610213610738565b6040516102209190612d0f565b60405180910390f35b610243600480360381019061023e9190612d6c565b6107ca565b6040516102509190612da8565b60405180910390f35b610273600480360381019061026e9190612e21565b610800565b6040516102809190612e7c565b60405180910390f35b6102a3600480360381019061029e9190612d6c565b610823565b6040516102b09190612e7c565b60405180910390f35b6102d360048036038101906102ce9190612e97565b610bb5565b6040516102e293929190612eea565b60405180910390f35b6102f3610d23565b6040516103009190612da8565b60405180910390f35b610323600480360381019061031e9190612d6c565b610d2d565b604051610331929190612f21565b60405180910390f35b610354600480360381019061034f9190612f4a565b610e0d565b6040516103619190612e7c565b60405180910390f35b610372610e3c565b60405161037f9190612fba565b60405180910390f35b610390610e50565b60405161039d9190613034565b60405180910390f35b6103ae610e74565b6040516103bb919061306b565b60405180910390f35b6103de60048036038101906103d99190612e21565b610e7d565b6040516103eb9190612e7c565b60405180910390f35b6103fc610eb4565b6040516104099190613095565b60405180910390f35b61041a610eda565b6040516104279190612da8565b60405180910390f35b61044a600480360381019061044591906130dc565b610ee0565b6040516104579190612e7c565b60405180910390f35b61047a60048036038101906104759190613109565b610f50565b6040516104879190612da8565b60405180910390f35b610498611093565b6040516104a59190613218565b60405180910390f35b6104c860048036038101906104c39190613234565b61118d565b6040516104d59190612da8565b60405180910390f35b6104e66111d5565b005b6104f06111e9565b6040516104fd9190612da8565b60405180910390f35b61050e6111ef565b60405161051b9190613095565b60405180910390f35b61052c611219565b6040516105399190612d0f565b60405180910390f35b61055c60048036038101906105579190613109565b6112ab565b6040516105699190612e7c565b60405180910390f35b61058c60048036038101906105879190613261565b611516565b6040516105999190612e7c565b60405180910390f35b6105bc60048036038101906105b791906130dc565b611a5f565b6040516105c99190612e7c565b60405180910390f35b6105ec60048036038101906105e79190612e21565b611acf565b6040516105f99190612e7c565b60405180910390f35b61061c60048036038101906106179190612e21565b611b46565b6040516106299190612e7c565b60405180910390f35b61063a611b69565b6040516106479190612fba565b60405180910390f35b610658611b7d565b6040516106659190612fba565b60405180910390f35b610676611b91565b6040516106839190613034565b60405180910390f35b6106a660048036038101906106a191906132b4565b611bb5565b6040516106b39190612da8565b60405180910390f35b6106d660048036038101906106d191906130dc565b611c3c565b6040516106e39190612e7c565b60405180910390f35b61070660048036038101906107019190613234565b611cac565b6040516107139190612e7c565b60405180910390f35b61073660048036038101906107319190613234565b611dd3565b005b60606003805461074790613323565b80601f016020809104026020016040519081016040528092919081815260200182805461077390613323565b80156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b5050505050905090565b6000612710600860049054906101000a900461ffff1661ffff16836107ef9190613383565b6107f991906133f4565b9050919050565b60008061080b611e56565b9050610818818585611e5e565b600191505092915050565b60008061082e610d23565b1161086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590613471565b60405180910390fd5b81600081116108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a9906134dd565b60405180910390fd5b806108bc3361118d565b10156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490613549565b60405180910390fd5b60008061090985610d2d565b9150915060008211801561091d5750600081115b61095c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610953906135db565b60405180910390fd5b610a3e336109f8847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190613627565b612027565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661206a9092919063ffffffff16565b610b2033610ada837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190613627565b612027565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661206a9092919063ffffffff16565b610b2a33866120f0565b610b4e82600654610b3b9190613654565b82600754610b499190613654565b6122bd565b3373ffffffffffffffffffffffffffffffffffffffff167f769d75c5eb493fe2422bbf211ad154f999b436ee9018a1a7def38606c1fcd08d838388610b91610d23565b604051610ba19493929190613688565b60405180910390a260019350505050919050565b60008060008086118015610bc95750600085115b8015610bd55750600084115b610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9061373f565b60405180910390fd5b6000612710600860029054906101000a900461ffff16600860009054906101000a900461ffff16610c45919061375f565b612710610c529190613795565b61ffff1688610c619190613383565b610c6b91906133f4565b9050612710600860029054906101000a900461ffff1661ffff1688610c909190613383565b610c9a91906133f4565b91508187610ca89190613654565b93508086610cb691906137cb565b8186610cc29190613383565b610ccc91906133f4565b9250610cd7856107ca565b831115610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090613871565b60405180910390fd5b5093509350939050565b6000600254905090565b6000806000610d3a610d23565b11610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613471565b60405180910390fd5b610d82610d23565b831115610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb906138dd565b60405180910390fd5b610dcc610d23565b83600654610dda9190613383565b610de491906133f4565b9150610dee610d23565b83600754610dfc9190613383565b610e0691906133f4565b9050915091565b600080610e18611e56565b9050610e258582856122cf565b610e3085858561235b565b60019150509392505050565b600860009054906101000a900461ffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006006905090565b600080610e88611e56565b9050610ea9818585610e9a8589611bb5565b610ea491906137cb565b611e5e565b600191505092915050565b600860069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000610eea6125d1565b81600860046101000a81548161ffff021916908361ffff1602179055507f98c77c1ba9214b5223a845929e75e2da09b83dd3785a1b2c1d1819af9df267e5610f306111ef565b83604051610f3f9291906138fd565b60405180910390a160019050919050565b600080610f5b610d23565b03610faa57818314610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990613998565b60405180910390fd5b82905061104a565b6000600654610fb7610d23565b85610fc29190613383565b610fcc91906133f4565b90506000600754610fdb610d23565b85610fe69190613383565b610ff091906133f4565b9050610ffc828261264f565b61103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290613a2a565b60405180910390fd5b611045828261268b565b925050505b6000811161108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613a96565b60405180910390fd5b92915050565b61109b612c02565b6040518061010001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815260200160065481526020016007548152602001611137610d23565b8152602001600860009054906101000a900461ffff1661ffff168152602001600860029054906101000a900461ffff1661ffff168152602001600860049054906101000a900461ffff1661ffff16815250905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111dd6125d1565b6111e760006126a5565b565b60065481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461122890613323565b80601f016020809104026020016040519081016040528092919081815260200182805461125490613323565b80156112a15780601f10611276576101008083540402835291602001916112a1565b820191906000526020600020905b81548152906001019060200180831161128457829003601f168201915b5050505050905090565b6000806112b88484610f50565b905061139e3330611357877f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190613627565b612027565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661276b909392919063ffffffff16565b611482333061143b867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114369190613627565b612027565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661276b909392919063ffffffff16565b61148c33826127f4565b6114b08460065461149d91906137cb565b846007546114ab91906137cb565b6122bd565b3373ffffffffffffffffffffffffffffffffffffffff167f31762e5f52b2e00c05b0fa347d2609b2ddeefe89f1ae1f0b1a5bdcf9482f81e18585846114f3610d23565b6040516115039493929190613688565b60405180910390a2600191505092915050565b600080611521610d23565b11611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613471565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061160657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90613b02565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16149050600080600080846116f0577f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000600754600654611739565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006006546007545b935093509350935060008060006117518b8686610bb5565b9250925092508982101561179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613b94565b60405180910390fd5b61186033600860069054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611839848b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118349190613627565b612027565b8a73ffffffffffffffffffffffffffffffffffffffff1661276b909392919063ffffffff16565b61190433306118dd868b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d89190613627565b612027565b8a73ffffffffffffffffffffffffffffffffffffffff1661276b909392919063ffffffff16565b6119a633611980848973ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197b9190613627565b612027565b8873ffffffffffffffffffffffffffffffffffffffff1661206a9092919063ffffffff16565b87156119d5576119d0836006546119bd91906137cb565b836007546119cb9190613654565b6122bd565b6119fa565b6119f9826006546119e69190613654565b846007546119f491906137cb565b6122bd565b5b3373ffffffffffffffffffffffffffffffffffffffff167f5620e542b9ce6a03dbe5af2c6483e766af6c96439562b26a0dcd2edd7099524b828585604051611a4493929190612eea565b60405180910390a26001985050505050505050509392505050565b6000611a696125d1565b81600860006101000a81548161ffff021916908361ffff1602179055507f894de968c4d8a5f8354019498fba1466d8872279d82d8a219dada3ab17d97662611aaf6111ef565b83604051611abe9291906138fd565b60405180910390a160019050919050565b600080611ada611e56565b90506000611ae88286611bb5565b905083811015611b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2490613c26565b60405180910390fd5b611b3a8286868403611e5e565b60019250505092915050565b600080611b51611e56565b9050611b5e81858561235b565b600191505092915050565b600860029054906101000a900461ffff1681565b600860049054906101000a900461ffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611c466125d1565b81600860026101000a81548161ffff021916908361ffff1602179055507f1d9e390a0f55a4e3251a1de541b3da1cb012fd85d9b4f0098bcffb70c4f4032d611c8c6111ef565b83604051611c9b9291906138fd565b60405180910390a160019050919050565b6000611cb66125d1565b8173ffffffffffffffffffffffffffffffffffffffff16600860069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90613cb8565b60405180910390fd5b81600860066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167f412871529f3cedd6ca6f10784258f4965a5d6e254127593fe354e7a62f6d0a2360405160405180910390a260019050919050565b611ddb6125d1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190613d4a565b60405180910390fd5b611e53816126a5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613ddc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390613e6e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161201a9190612da8565b60405180910390a3505050565b600060068260ff161115612060576006826120429190613e8e565b600a61204e9190613ff6565b836120599190613383565b9050612064565b8290505b92915050565b6120eb8363a9059cbb60e01b8484604051602401612089929190614041565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061294a565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361215f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612156906140dc565b60405180910390fd5b61216b82600083612a11565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e89061416e565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122a49190612da8565b60405180910390a36122b883600084612a16565b505050565b81600681905550806007819055505050565b60006122db8484611bb5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123555781811015612347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233e906141da565b60405180910390fd5b6123548484848403611e5e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c19061426c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612430906142fe565b60405180910390fd5b612444838383612a11565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c190614390565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125b89190612da8565b60405180910390a36125cb848484612a16565b50505050565b6125d9611e56565b73ffffffffffffffffffffffffffffffffffffffff166125f76111ef565b73ffffffffffffffffffffffffffffffffffffffff161461264d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612644906143fc565b60405180910390fd5b565b60008183036126615760019050612685565b61266b8383612a1b565b6001612677858561268b565b61268191906137cb565b1490505b92915050565b60008183111561269b578161269d565b825b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127ee846323b872dd60e01b85858560405160240161278c9392919061441c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061294a565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a9061449f565b60405180910390fd5b61286f60008383612a11565b806002600082825461288191906137cb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129329190612da8565b60405180910390a361294660008383612a16565b5050565b60006129ac826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612a359092919063ffffffff16565b9050600081511115612a0c57808060200190518101906129cc91906144eb565b612a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a029061458a565b60405180910390fd5b5b505050565b505050565b505050565b600081831015612a2b5781612a2d565b825b905092915050565b6060612a448484600085612a4d565b90509392505050565b606082471015612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a899061461c565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612abb9190614683565b60006040518083038185875af1925050503d8060008114612af8576040519150601f19603f3d011682016040523d82523d6000602084013e612afd565b606091505b5091509150612b0e87838387612b1a565b92505050949350505050565b60608315612b7c576000835103612b7457612b3485612b8f565b612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a906146e6565b60405180910390fd5b5b829050612b87565b612b868383612bb2565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115612bc55781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf99190612d0f565b60405180910390fd5b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600061ffff168152602001600061ffff168152602001600061ffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cb9578082015181840152602081019050612c9e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce182612c7f565b612ceb8185612c8a565b9350612cfb818560208601612c9b565b612d0481612cc5565b840191505092915050565b60006020820190508181036000830152612d298184612cd6565b905092915050565b600080fd5b6000819050919050565b612d4981612d36565b8114612d5457600080fd5b50565b600081359050612d6681612d40565b92915050565b600060208284031215612d8257612d81612d31565b5b6000612d9084828501612d57565b91505092915050565b612da281612d36565b82525050565b6000602082019050612dbd6000830184612d99565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dee82612dc3565b9050919050565b612dfe81612de3565b8114612e0957600080fd5b50565b600081359050612e1b81612df5565b92915050565b60008060408385031215612e3857612e37612d31565b5b6000612e4685828601612e0c565b9250506020612e5785828601612d57565b9150509250929050565b60008115159050919050565b612e7681612e61565b82525050565b6000602082019050612e916000830184612e6d565b92915050565b600080600060608486031215612eb057612eaf612d31565b5b6000612ebe86828701612d57565b9350506020612ecf86828701612d57565b9250506040612ee086828701612d57565b9150509250925092565b6000606082019050612eff6000830186612d99565b612f0c6020830185612d99565b612f196040830184612d99565b949350505050565b6000604082019050612f366000830185612d99565b612f436020830184612d99565b9392505050565b600080600060608486031215612f6357612f62612d31565b5b6000612f7186828701612e0c565b9350506020612f8286828701612e0c565b9250506040612f9386828701612d57565b9150509250925092565b600061ffff82169050919050565b612fb481612f9d565b82525050565b6000602082019050612fcf6000830184612fab565b92915050565b6000819050919050565b6000612ffa612ff5612ff084612dc3565b612fd5565b612dc3565b9050919050565b600061300c82612fdf565b9050919050565b600061301e82613001565b9050919050565b61302e81613013565b82525050565b60006020820190506130496000830184613025565b92915050565b600060ff82169050919050565b6130658161304f565b82525050565b6000602082019050613080600083018461305c565b92915050565b61308f81612de3565b82525050565b60006020820190506130aa6000830184613086565b92915050565b6130b981612f9d565b81146130c457600080fd5b50565b6000813590506130d6816130b0565b92915050565b6000602082840312156130f2576130f1612d31565b5b6000613100848285016130c7565b91505092915050565b600080604083850312156131205761311f612d31565b5b600061312e85828601612d57565b925050602061313f85828601612d57565b9150509250929050565b61315281613013565b82525050565b61316181612d36565b82525050565b61317081612f9d565b82525050565b6101008201600082015161318d6000850182613149565b5060208201516131a06020850182613149565b5060408201516131b36040850182613158565b5060608201516131c66060850182613158565b5060808201516131d96080850182613158565b5060a08201516131ec60a0850182613167565b5060c08201516131ff60c0850182613167565b5060e082015161321260e0850182613167565b50505050565b60006101008201905061322e6000830184613176565b92915050565b60006020828403121561324a57613249612d31565b5b600061325884828501612e0c565b91505092915050565b60008060006060848603121561327a57613279612d31565b5b600061328886828701612e0c565b935050602061329986828701612d57565b92505060406132aa86828701612d57565b9150509250925092565b600080604083850312156132cb576132ca612d31565b5b60006132d985828601612e0c565b92505060206132ea85828601612e0c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061333b57607f821691505b60208210810361334e5761334d6132f4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061338e82612d36565b915061339983612d36565b92508282026133a781612d36565b915082820484148315176133be576133bd613354565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133ff82612d36565b915061340a83612d36565b92508261341a576134196133c5565b5b828204905092915050565b7f4572726f723a20636f6e747261637420686173206e6f2066756e647300000000600082015250565b600061345b601c83612c8a565b915061346682613425565b602082019050919050565b6000602082019050818103600083015261348a8161344e565b9050919050565b7f4572726f723a20496e76616c696420416d6f756e742c2076616c7565203d2030600082015250565b60006134c7602083612c8a565b91506134d282613491565b602082019050919050565b600060208201905081810360008301526134f6816134ba565b9050919050565b7f4572726f723a20496e73756666696369656e74204c502062616c616e63650000600082015250565b6000613533601e83612c8a565b915061353e826134fd565b602082019050919050565b6000602082019050818103600083015261356281613526565b9050919050565b7f5769746864726177204572726f723a20616d6f756e74732077697468207a657260008201527f6f2076616c756500000000000000000000000000000000000000000000000000602082015250565b60006135c5602783612c8a565b91506135d082613569565b604082019050919050565b600060208201905081810360008301526135f4816135b8565b9050919050565b6136048161304f565b811461360f57600080fd5b50565b600081519050613621816135fb565b92915050565b60006020828403121561363d5761363c612d31565b5b600061364b84828501613612565b91505092915050565b600061365f82612d36565b915061366a83612d36565b925082820390508181111561368257613681613354565b5b92915050565b600060808201905061369d6000830187612d99565b6136aa6020830186612d99565b6136b76040830185612d99565b6136c46060830184612d99565b95945050505050565b7f53776170204572726f723a20496e70757420616d6f756e74207769746820302060008201527f76616c7565206e6f742076616c69640000000000000000000000000000000000602082015250565b6000613729602f83612c8a565b9150613734826136cd565b604082019050919050565b600060208201905081810360008301526137588161371c565b9050919050565b600061376a82612f9d565b915061377583612f9d565b9250828201905061ffff81111561378f5761378e613354565b5b92915050565b60006137a082612f9d565b91506137ab83612f9d565b9250828203905061ffff8111156137c5576137c4613354565b5b92915050565b60006137d682612d36565b91506137e183612d36565b92508282019050808211156137f9576137f8613354565b5b92915050565b7f53776170204572726f723a206f75747075742076616c7565206973206772656160008201527f746572207468616e20746865206c696d69740000000000000000000000000000602082015250565b600061385b603283612c8a565b9150613866826137ff565b604082019050919050565b6000602082019050818103600083015261388a8161384e565b9050919050565b7f4572726f723a20696e73756666696369656e7420706f6f6c2062616c616e6365600082015250565b60006138c7602083612c8a565b91506138d282613891565b602082019050919050565b600060208201905081810360008301526138f6816138ba565b9050919050565b60006040820190506139126000830185613086565b61391f6020830184612fab565b9392505050565b7f4572726f723a2047656e6573697320416d6f756e7473206d757374206265207460008201527f68652073616d6500000000000000000000000000000000000000000000000000602082015250565b6000613982602783612c8a565b915061398d82613926565b604082019050919050565b600060208201905081810360008301526139b181613975565b9050919050565b7f4572726f723a206571756976616c656e742076616c7565206e6f742070726f7660008201527f6964656400000000000000000000000000000000000000000000000000000000602082015250565b6000613a14602483612c8a565b9150613a1f826139b8565b604082019050919050565b60006020820190508181036000830152613a4381613a07565b9050919050565b7f4572726f723a207368617265732077697468207a65726f2076616c7565000000600082015250565b6000613a80601d83612c8a565b9150613a8b82613a4a565b602082019050919050565b60006020820190508181036000830152613aaf81613a73565b9050919050565b7f5472616465204572726f723a20696e76616c696420746f6b656e000000000000600082015250565b6000613aec601a83612c8a565b9150613af782613ab6565b602082019050919050565b60006020820190508181036000830152613b1b81613adf565b9050919050565b7f5472616465204572726f723a204f757470757420616d6f756e74206973206c6560008201527f7373207468616e20657870656374656400000000000000000000000000000000602082015250565b6000613b7e603083612c8a565b9150613b8982613b22565b604082019050919050565b60006020820190508181036000830152613bad81613b71565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613c10602583612c8a565b9150613c1b82613bb4565b604082019050919050565b60006020820190508181036000830152613c3f81613c03565b9050919050565b7f4e657720526563697069656e742063616e206265207468652073616d6520746860008201527f616e2063757272656e7400000000000000000000000000000000000000000000602082015250565b6000613ca2602a83612c8a565b9150613cad82613c46565b604082019050919050565b60006020820190508181036000830152613cd181613c95565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d34602683612c8a565b9150613d3f82613cd8565b604082019050919050565b60006020820190508181036000830152613d6381613d27565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dc6602483612c8a565b9150613dd182613d6a565b604082019050919050565b60006020820190508181036000830152613df581613db9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e58602283612c8a565b9150613e6382613dfc565b604082019050919050565b60006020820190508181036000830152613e8781613e4b565b9050919050565b6000613e998261304f565b9150613ea48361304f565b9250828203905060ff811115613ebd57613ebc613354565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115613f1a57808604811115613ef657613ef5613354565b5b6001851615613f055780820291505b8081029050613f1385613ec3565b9450613eda565b94509492505050565b600082613f335760019050613fef565b81613f415760009050613fef565b8160018114613f575760028114613f6157613f90565b6001915050613fef565b60ff841115613f7357613f72613354565b5b8360020a915084821115613f8a57613f89613354565b5b50613fef565b5060208310610133831016604e8410600b8410161715613fc55782820a905083811115613fc057613fbf613354565b5b613fef565b613fd28484846001613ed0565b92509050818404811115613fe957613fe8613354565b5b81810290505b9392505050565b600061400182612d36565b915061400c8361304f565b92506140397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f23565b905092915050565b60006040820190506140566000830185613086565b6140636020830184612d99565b9392505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006140c6602183612c8a565b91506140d18261406a565b604082019050919050565b600060208201905081810360008301526140f5816140b9565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614158602283612c8a565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006141c4601d83612c8a565b91506141cf8261418e565b602082019050919050565b600060208201905081810360008301526141f3816141b7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614256602583612c8a565b9150614261826141fa565b604082019050919050565b6000602082019050818103600083015261428581614249565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142e8602383612c8a565b91506142f38261428c565b604082019050919050565b60006020820190508181036000830152614317816142db565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061437a602683612c8a565b91506143858261431e565b604082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143e6602083612c8a565b91506143f1826143b0565b602082019050919050565b60006020820190508181036000830152614415816143d9565b9050919050565b60006060820190506144316000830186613086565b61443e6020830185613086565b61444b6040830184612d99565b949350505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614489601f83612c8a565b915061449482614453565b602082019050919050565b600060208201905081810360008301526144b88161447c565b9050919050565b6144c881612e61565b81146144d357600080fd5b50565b6000815190506144e5816144bf565b92915050565b60006020828403121561450157614500612d31565b5b600061450f848285016144d6565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614574602a83612c8a565b915061457f82614518565b604082019050919050565b600060208201905081810360008301526145a381614567565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614606602683612c8a565b9150614611826145aa565b604082019050919050565b60006020820190508181036000830152614635816145f9565b9050919050565b600081519050919050565b600081905092915050565b600061465d8261463c565b6146678185614647565b9350614677818560208601612c9b565b80840191505092915050565b600061468f8284614652565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006146d0601d83612c8a565b91506146db8261469a565b602082019050919050565b600060208201905081810360008301526146ff816146c3565b905091905056fea2646970667358221220a531d4da7baa22c17cd4a08bdf7a2cec6cf76eb12a2cfe965253cd294595743f64736f6c63430008110033000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000008000000000000000000000000043d903211ae9afdbda240e39fcaeb5dd7558e05b000000000000000000000000000000000000000000000000000000000000000b55534454555344435f4c50000000000000000000000000000000000000000000