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) 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
0x60c0604052601e600860006101000a81548161ffff021916908361ffff1602179055506014600860026101000a81548161ffff021916908361ffff1602179055506103e8600860046101000a81548161ffff021916908361ffff1602179055503480156200006c57600080fd5b5060405162004bb938038062004bb9833981810160405281019062000092919062000453565b81828160039081620000a591906200072f565b508060049081620000b791906200072f565b505050620000da620000ce6200018d60201b60201c565b6200019560201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505080600860066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000816565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200029c826200026f565b9050919050565b620002ae816200028f565b8114620002ba57600080fd5b50565b600081519050620002ce81620002a3565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200032982620002de565b810181811067ffffffffffffffff821117156200034b576200034a620002ef565b5b80604052505050565b6000620003606200025b565b90506200036e82826200031e565b919050565b600067ffffffffffffffff821115620003915762000390620002ef565b5b6200039c82620002de565b9050602081019050919050565b60005b83811015620003c9578082015181840152602081019050620003ac565b60008484015250505050565b6000620003ec620003e68462000373565b62000354565b9050828152602081018484840111156200040b576200040a620002d9565b5b62000418848285620003a9565b509392505050565b600082601f830112620004385762000437620002d4565b5b81516200044a848260208601620003d5565b91505092915050565b6000806000806080858703121562000470576200046f62000265565b5b60006200048087828801620002bd565b94505060206200049387828801620002bd565b935050604085015167ffffffffffffffff811115620004b757620004b66200026a565b5b620004c58782880162000420565b9250506060620004d887828801620002bd565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200053757607f821691505b6020821081036200054d576200054c620004ef565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000578565b620005c3868362000578565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006106200060a6200060484620005db565b620005e5565b620005db565b9050919050565b6000819050919050565b6200062c83620005ef565b620006446200063b8262000617565b84845462000585565b825550505050565b600090565b6200065b6200064c565b6200066881848462000621565b505050565b5b8181101562000690576200068460008262000651565b6001810190506200066e565b5050565b601f821115620006df57620006a98162000553565b620006b48462000568565b81016020851015620006c4578190505b620006dc620006d38562000568565b8301826200066d565b50505b505050565b600082821c905092915050565b60006200070460001984600802620006e4565b1980831691505092915050565b60006200071f8383620006f1565b9150826002028217905092915050565b6200073a82620004e4565b67ffffffffffffffff811115620007565762000755620002ef565b5b6200076282546200051e565b6200076f82828562000694565b600060209050601f831160018114620007a7576000841562000792578287015190505b6200079e858262000711565b8655506200080e565b601f198416620007b78662000553565b60005b82811015620007e157848901518255600182019150602085019450602081019050620007ba565b86831015620008015784890151620007fd601f891682620006f1565b8355505b6001600288020188555050505b505050505050565b60805160a051614306620008b360003960008181610a9c01528181610add01528181610f0a0152818161119d015281816114b4015281816114f60152818161185a0152818161194701526119b501526000818161095e0152818161099f0152818161116101528181611374015281816113b601528181611805015281816118eb01528181611968015281816119940152611dd301526143066000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a9059cbb116100ad578063d21220a71161007c578063d21220a71461066e578063dd62ed3e1461068c578063e4467f35146106bc578063e74b981b146106ec578063f2fde38b1461071c57610206565b8063a9059cbb146105d2578063b0e21e8a14610602578063b57f272e14610620578063d004f0f71461063e57610206565b806395d89b41116100e957806395d89b41146105245780639cd441da146105425780639fdccfb814610572578063a457c2d7146105a257610206565b806370a08231146104ae578063715018a6146104de57806380abfda8146104e85780638da5cb5b1461050657610206565b806324bcdfbd1161019d578063469048401161016c57806346904840146103f45780634832cee11461041257806350e4a49a14610430578063574274411461046057806360246c881461049057610206565b806324bcdfbd1461036a57806325be124e14610388578063313ce567146103a657806339509351146103c457610206565b806313e026f9116101d957806313e026f9146102b957806318160ddd146102eb5780631d8addd31461030957806323b872dd1461033a57610206565b806306fdde031461020b5780630771d90914610229578063095ea7b3146102595780630a861f2a14610289575b600080fd5b610213610738565b6040516102209190612bac565b60405180910390f35b610243600480360381019061023e9190612c09565b6107ca565b6040516102509190612c45565b60405180910390f35b610273600480360381019061026e9190612cbe565b610800565b6040516102809190612d19565b60405180910390f35b6102a3600480360381019061029e9190612c09565b610823565b6040516102b09190612d19565b60405180910390f35b6102d360048036038101906102ce9190612d34565b610c6d565b6040516102e293929190612d87565b60405180910390f35b6102f3610ddb565b6040516103009190612c45565b60405180910390f35b610323600480360381019061031e9190612c09565b610de5565b604051610331929190612dbe565b60405180910390f35b610354600480360381019061034f9190612de7565b610ec5565b6040516103619190612d19565b60405180910390f35b610372610ef4565b60405161037f9190612e57565b60405180910390f35b610390610f08565b60405161039d9190612ed1565b60405180910390f35b6103ae610f2c565b6040516103bb9190612f08565b60405180910390f35b6103de60048036038101906103d99190612cbe565b610f35565b6040516103eb9190612d19565b60405180910390f35b6103fc610f6c565b6040516104099190612f32565b60405180910390f35b61041a610f92565b6040516104279190612c45565b60405180910390f35b61044a60048036038101906104459190612f79565b610f98565b6040516104579190612d19565b60405180910390f35b61047a60048036038101906104759190612fa6565b611008565b6040516104879190612c45565b60405180910390f35b61049861114b565b6040516104a591906130b5565b60405180910390f35b6104c860048036038101906104c391906130d1565b611245565b6040516104d59190612c45565b60405180910390f35b6104e661128d565b005b6104f06112a1565b6040516104fd9190612c45565b60405180910390f35b61050e6112a7565b60405161051b9190612f32565b60405180910390f35b61052c6112d1565b6040516105399190612bac565b60405180910390f35b61055c60048036038101906105579190612fa6565b611363565b6040516105699190612d19565b60405180910390f35b61058c60048036038101906105879190612f79565b611686565b6040516105999190612d19565b60405180910390f35b6105bc60048036038101906105b79190612cbe565b6116f6565b6040516105c99190612d19565b60405180910390f35b6105ec60048036038101906105e79190612cbe565b61176d565b6040516105f99190612d19565b60405180910390f35b61060a611790565b6040516106179190612e57565b60405180910390f35b6106286117a4565b6040516106359190612e57565b60405180910390f35b61065860048036038101906106539190612cbe565b6117b8565b6040516106659190612d19565b60405180910390f35b610676611dd1565b6040516106839190612ed1565b60405180910390f35b6106a660048036038101906106a191906130fe565b611df5565b6040516106b39190612c45565b60405180910390f35b6106d660048036038101906106d19190612f79565b611e7c565b6040516106e39190612d19565b60405180910390f35b610706600480360381019061070191906130d1565b611eec565b6040516107139190612d19565b60405180910390f35b610736600480360381019061073191906130d1565b612013565b005b6060600380546107479061316d565b80601f01602080910402602001604051908101604052809291908181526020018280546107739061316d565b80156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b5050505050905090565b6000612710600860049054906101000a900461ffff1661ffff16836107ef91906131cd565b6107f9919061323e565b9050919050565b60008061080b612096565b905061081881858561209e565b600191505092915050565b60008061082e610ddb565b1161086e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610865906132bb565b60405180910390fd5b81600081116108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a990613327565b60405180910390fd5b806108bc33611245565b10156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490613393565b60405180910390fd5b60008061090985610de5565b9150915060008211801561091d5750600081115b61095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390613425565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33610a31857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190613471565b612267565b6040518363ffffffff1660e01b8152600401610a4e92919061349e565b6020604051808303816000875af1158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9191906134f3565b610a9a57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33610b6f847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190613471565b612267565b6040518363ffffffff1660e01b8152600401610b8c92919061349e565b6020604051808303816000875af1158015610bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcf91906134f3565b610bd857600080fd5b610be233866122aa565b610c0682600654610bf39190613520565b82600754610c019190613520565b612477565b3373ffffffffffffffffffffffffffffffffffffffff167f769d75c5eb493fe2422bbf211ad154f999b436ee9018a1a7def38606c1fcd08d838388610c49610ddb565b604051610c599493929190613554565b60405180910390a260019350505050919050565b60008060008086118015610c815750600085115b8015610c8d5750600084115b610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc39061360b565b60405180910390fd5b6000612710600860029054906101000a900461ffff16600860009054906101000a900461ffff16610cfd919061362b565b612710610d0a9190613661565b61ffff1688610d1991906131cd565b610d23919061323e565b9050612710600860029054906101000a900461ffff1661ffff1688610d4891906131cd565b610d52919061323e565b91508187610d609190613520565b93508086610d6e9190613697565b8186610d7a91906131cd565b610d84919061323e565b9250610d8f856107ca565b831115610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc89061373d565b60405180910390fd5b5093509350939050565b6000600254905090565b6000806000610df2610ddb565b11610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906132bb565b60405180910390fd5b610e3a610ddb565b831115610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e73906137a9565b60405180910390fd5b610e84610ddb565b83600654610e9291906131cd565b610e9c919061323e565b9150610ea6610ddb565b83600754610eb491906131cd565b610ebe919061323e565b9050915091565b600080610ed0612096565b9050610edd858285612489565b610ee8858585612515565b60019150509392505050565b600860009054906101000a900461ffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006006905090565b600080610f40612096565b9050610f61818585610f528589611df5565b610f5c9190613697565b61209e565b600191505092915050565b600860069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000610fa261278b565b81600860046101000a81548161ffff021916908361ffff1602179055507f98c77c1ba9214b5223a845929e75e2da09b83dd3785a1b2c1d1819af9df267e5610fe86112a7565b83604051610ff79291906137c9565b60405180910390a160019050919050565b600080611013610ddb565b036110625781831461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190613864565b60405180910390fd5b829050611102565b600060065461106f610ddb565b8561107a91906131cd565b611084919061323e565b90506000600754611093610ddb565b8561109e91906131cd565b6110a8919061323e565b90506110b48282612809565b6110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea906138f6565b60405180910390fd5b6110fd8282612845565b925050505b60008111611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613962565b60405180910390fd5b92915050565b611153612a9f565b6040518061010001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600654815260200160075481526020016111ef610ddb565b8152602001600860009054906101000a900461ffff1661ffff168152602001600860029054906101000a900461ffff1661ffff168152602001600860049054906101000a900461ffff1661ffff16815250905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61129561278b565b61129f600061285f565b565b60065481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112e09061316d565b80601f016020809104026020016040519081016040528092919081815260200182805461130c9061316d565b80156113595780601f1061132e57610100808354040283529160200191611359565b820191906000526020600020905b81548152906001019060200180831161133c57829003601f168201915b5050505050905090565b6000806113708484611008565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330611448887f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613471565b612267565b6040518463ffffffff1660e01b815260040161146693929190613982565b6020604051808303816000875af1158015611485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a991906134f3565b6114b257600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330611588877f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115839190613471565b612267565b6040518463ffffffff1660e01b81526004016115a693929190613982565b6020604051808303816000875af11580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e991906134f3565b6115f257600080fd5b6115fc3382612925565b6116208460065461160d9190613697565b8460075461161b9190613697565b612477565b3373ffffffffffffffffffffffffffffffffffffffff167f31762e5f52b2e00c05b0fa347d2609b2ddeefe89f1ae1f0b1a5bdcf9482f81e1858584611663610ddb565b6040516116739493929190613554565b60405180910390a2600191505092915050565b600061169061278b565b81600860006101000a81548161ffff021916908361ffff1602179055507f894de968c4d8a5f8354019498fba1466d8872279d82d8a219dada3ab17d976626116d66112a7565b836040516116e59291906137c9565b60405180910390a160019050919050565b600080611701612096565b9050600061170f8286611df5565b905083811015611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90613a2b565b60405180910390fd5b611761828686840361209e565b60019250505092915050565b600080611778612096565b9050611785818585612515565b600191505092915050565b600860029054906101000a900461ffff1681565b600860049054906101000a900461ffff1681565b6000806117c3610ddb565b11611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa906132bb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806118a857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90613a97565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060008060008084611992577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006007546006546119db565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006006546007545b935093509350935060008060006119f38a8686610c6d565b9250925092508673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600860069054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ab1858c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aac9190613471565b612267565b6040518463ffffffff1660e01b8152600401611acf93929190613982565b6020604051808303816000875af1158015611aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1291906134f3565b611b1b57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330611bb1878c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bac9190613471565b612267565b6040518463ffffffff1660e01b8152600401611bcf93929190613982565b6020604051808303816000875af1158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1291906134f3565b611c1b57600080fd5b8573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33611cb0858a73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cab9190613471565b612267565b6040518363ffffffff1660e01b8152600401611ccd92919061349e565b6020604051808303816000875af1158015611cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1091906134f3565b611d1957600080fd5b8715611d4857611d4383600654611d309190613697565b83600754611d3e9190613520565b612477565b611d6d565b611d6c82600654611d599190613520565b84600754611d679190613697565b612477565b5b3373ffffffffffffffffffffffffffffffffffffffff167f5620e542b9ce6a03dbe5af2c6483e766af6c96439562b26a0dcd2edd7099524b828585604051611db793929190612d87565b60405180910390a260019850505050505050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611e8661278b565b81600860026101000a81548161ffff021916908361ffff1602179055507f1d9e390a0f55a4e3251a1de541b3da1cb012fd85d9b4f0098bcffb70c4f4032d611ecc6112a7565b83604051611edb9291906137c9565b60405180910390a160019050919050565b6000611ef661278b565b8173ffffffffffffffffffffffffffffffffffffffff16600860069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613b29565b60405180910390fd5b81600860066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167f412871529f3cedd6ca6f10784258f4965a5d6e254127593fe354e7a62f6d0a2360405160405180910390a260019050919050565b61201b61278b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613bbb565b60405180910390fd5b6120938161285f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490613c4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613cdf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161225a9190612c45565b60405180910390a3505050565b600060068260ff1611156122a0576006826122829190613cff565b600a61228e9190613e67565b8361229991906131cd565b90506122a4565b8290505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090613f24565b60405180910390fd5b61232582600083612a7b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a290613fb6565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161245e9190612c45565b60405180910390a361247283600084612a80565b505050565b81600681905550806007819055505050565b60006124958484611df5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461250f5781811015612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890614022565b60405180910390fd5b61250e848484840361209e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b906140b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90614146565b60405180910390fd5b6125fe838383612a7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267b906141d8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127729190612c45565b60405180910390a3612785848484612a80565b50505050565b612793612096565b73ffffffffffffffffffffffffffffffffffffffff166127b16112a7565b73ffffffffffffffffffffffffffffffffffffffff1614612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe90614244565b60405180910390fd5b565b600081830361281b576001905061283f565b6128258383612a85565b60016128318585612845565b61283b9190613697565b1490505b92915050565b6000818311156128555781612857565b825b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298b906142b0565b60405180910390fd5b6129a060008383612a7b565b80600260008282546129b29190613697565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a639190612c45565b60405180910390a3612a7760008383612a80565b5050565b505050565b505050565b600081831015612a955781612a97565b825b905092915050565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600061ffff168152602001600061ffff168152602001600061ffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b56578082015181840152602081019050612b3b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b7e82612b1c565b612b888185612b27565b9350612b98818560208601612b38565b612ba181612b62565b840191505092915050565b60006020820190508181036000830152612bc68184612b73565b905092915050565b600080fd5b6000819050919050565b612be681612bd3565b8114612bf157600080fd5b50565b600081359050612c0381612bdd565b92915050565b600060208284031215612c1f57612c1e612bce565b5b6000612c2d84828501612bf4565b91505092915050565b612c3f81612bd3565b82525050565b6000602082019050612c5a6000830184612c36565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c8b82612c60565b9050919050565b612c9b81612c80565b8114612ca657600080fd5b50565b600081359050612cb881612c92565b92915050565b60008060408385031215612cd557612cd4612bce565b5b6000612ce385828601612ca9565b9250506020612cf485828601612bf4565b9150509250929050565b60008115159050919050565b612d1381612cfe565b82525050565b6000602082019050612d2e6000830184612d0a565b92915050565b600080600060608486031215612d4d57612d4c612bce565b5b6000612d5b86828701612bf4565b9350506020612d6c86828701612bf4565b9250506040612d7d86828701612bf4565b9150509250925092565b6000606082019050612d9c6000830186612c36565b612da96020830185612c36565b612db66040830184612c36565b949350505050565b6000604082019050612dd36000830185612c36565b612de06020830184612c36565b9392505050565b600080600060608486031215612e0057612dff612bce565b5b6000612e0e86828701612ca9565b9350506020612e1f86828701612ca9565b9250506040612e3086828701612bf4565b9150509250925092565b600061ffff82169050919050565b612e5181612e3a565b82525050565b6000602082019050612e6c6000830184612e48565b92915050565b6000819050919050565b6000612e97612e92612e8d84612c60565b612e72565b612c60565b9050919050565b6000612ea982612e7c565b9050919050565b6000612ebb82612e9e565b9050919050565b612ecb81612eb0565b82525050565b6000602082019050612ee66000830184612ec2565b92915050565b600060ff82169050919050565b612f0281612eec565b82525050565b6000602082019050612f1d6000830184612ef9565b92915050565b612f2c81612c80565b82525050565b6000602082019050612f476000830184612f23565b92915050565b612f5681612e3a565b8114612f6157600080fd5b50565b600081359050612f7381612f4d565b92915050565b600060208284031215612f8f57612f8e612bce565b5b6000612f9d84828501612f64565b91505092915050565b60008060408385031215612fbd57612fbc612bce565b5b6000612fcb85828601612bf4565b9250506020612fdc85828601612bf4565b9150509250929050565b612fef81612eb0565b82525050565b612ffe81612bd3565b82525050565b61300d81612e3a565b82525050565b6101008201600082015161302a6000850182612fe6565b50602082015161303d6020850182612fe6565b5060408201516130506040850182612ff5565b5060608201516130636060850182612ff5565b5060808201516130766080850182612ff5565b5060a082015161308960a0850182613004565b5060c082015161309c60c0850182613004565b5060e08201516130af60e0850182613004565b50505050565b6000610100820190506130cb6000830184613013565b92915050565b6000602082840312156130e7576130e6612bce565b5b60006130f584828501612ca9565b91505092915050565b6000806040838503121561311557613114612bce565b5b600061312385828601612ca9565b925050602061313485828601612ca9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061318557607f821691505b6020821081036131985761319761313e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131d882612bd3565b91506131e383612bd3565b92508282026131f181612bd3565b915082820484148315176132085761320761319e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061324982612bd3565b915061325483612bd3565b9250826132645761326361320f565b5b828204905092915050565b7f4572726f723a20636f6e747261637420686173206e6f2066756e647300000000600082015250565b60006132a5601c83612b27565b91506132b08261326f565b602082019050919050565b600060208201905081810360008301526132d481613298565b9050919050565b7f4572726f723a20496e76616c696420416d6f756e742c2076616c7565203d2030600082015250565b6000613311602083612b27565b915061331c826132db565b602082019050919050565b6000602082019050818103600083015261334081613304565b9050919050565b7f4572726f723a20496e73756666696369656e74204c502062616c616e63650000600082015250565b600061337d601e83612b27565b915061338882613347565b602082019050919050565b600060208201905081810360008301526133ac81613370565b9050919050565b7f5769746864726177204572726f723a20616d6f756e74732077697468207a657260008201527f6f2076616c756500000000000000000000000000000000000000000000000000602082015250565b600061340f602783612b27565b915061341a826133b3565b604082019050919050565b6000602082019050818103600083015261343e81613402565b9050919050565b61344e81612eec565b811461345957600080fd5b50565b60008151905061346b81613445565b92915050565b60006020828403121561348757613486612bce565b5b60006134958482850161345c565b91505092915050565b60006040820190506134b36000830185612f23565b6134c06020830184612c36565b9392505050565b6134d081612cfe565b81146134db57600080fd5b50565b6000815190506134ed816134c7565b92915050565b60006020828403121561350957613508612bce565b5b6000613517848285016134de565b91505092915050565b600061352b82612bd3565b915061353683612bd3565b925082820390508181111561354e5761354d61319e565b5b92915050565b60006080820190506135696000830187612c36565b6135766020830186612c36565b6135836040830185612c36565b6135906060830184612c36565b95945050505050565b7f53776170204572726f723a20496e70757420616d6f756e74207769746820302060008201527f76616c7565206e6f742076616c69640000000000000000000000000000000000602082015250565b60006135f5602f83612b27565b915061360082613599565b604082019050919050565b60006020820190508181036000830152613624816135e8565b9050919050565b600061363682612e3a565b915061364183612e3a565b9250828201905061ffff81111561365b5761365a61319e565b5b92915050565b600061366c82612e3a565b915061367783612e3a565b9250828203905061ffff8111156136915761369061319e565b5b92915050565b60006136a282612bd3565b91506136ad83612bd3565b92508282019050808211156136c5576136c461319e565b5b92915050565b7f53776170204572726f723a206f75747075742076616c7565206973206772656160008201527f746572207468616e20746865206c696d69740000000000000000000000000000602082015250565b6000613727603283612b27565b9150613732826136cb565b604082019050919050565b600060208201905081810360008301526137568161371a565b9050919050565b7f4572726f723a20696e73756666696369656e7420706f6f6c2062616c616e6365600082015250565b6000613793602083612b27565b915061379e8261375d565b602082019050919050565b600060208201905081810360008301526137c281613786565b9050919050565b60006040820190506137de6000830185612f23565b6137eb6020830184612e48565b9392505050565b7f4572726f723a2047656e6573697320416d6f756e7473206d757374206265207460008201527f68652073616d6500000000000000000000000000000000000000000000000000602082015250565b600061384e602783612b27565b9150613859826137f2565b604082019050919050565b6000602082019050818103600083015261387d81613841565b9050919050565b7f4572726f723a206571756976616c656e742076616c7565206e6f742070726f7660008201527f6964656400000000000000000000000000000000000000000000000000000000602082015250565b60006138e0602483612b27565b91506138eb82613884565b604082019050919050565b6000602082019050818103600083015261390f816138d3565b9050919050565b7f4572726f723a207368617265732077697468207a65726f2076616c7565000000600082015250565b600061394c601d83612b27565b915061395782613916565b602082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b60006060820190506139976000830186612f23565b6139a46020830185612f23565b6139b16040830184612c36565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a15602583612b27565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b7f5472616465204572726f723a20696e76616c696420746f6b656e000000000000600082015250565b6000613a81601a83612b27565b9150613a8c82613a4b565b602082019050919050565b60006020820190508181036000830152613ab081613a74565b9050919050565b7f4e657720526563697069656e742063616e206265207468652073616d6520746860008201527f616e2063757272656e7400000000000000000000000000000000000000000000602082015250565b6000613b13602a83612b27565b9150613b1e82613ab7565b604082019050919050565b60006020820190508181036000830152613b4281613b06565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ba5602683612b27565b9150613bb082613b49565b604082019050919050565b60006020820190508181036000830152613bd481613b98565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c37602483612b27565b9150613c4282613bdb565b604082019050919050565b60006020820190508181036000830152613c6681613c2a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc9602283612b27565b9150613cd482613c6d565b604082019050919050565b60006020820190508181036000830152613cf881613cbc565b9050919050565b6000613d0a82612eec565b9150613d1583612eec565b9250828203905060ff811115613d2e57613d2d61319e565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115613d8b57808604811115613d6757613d6661319e565b5b6001851615613d765780820291505b8081029050613d8485613d34565b9450613d4b565b94509492505050565b600082613da45760019050613e60565b81613db25760009050613e60565b8160018114613dc85760028114613dd257613e01565b6001915050613e60565b60ff841115613de457613de361319e565b5b8360020a915084821115613dfb57613dfa61319e565b5b50613e60565b5060208310610133831016604e8410600b8410161715613e365782820a905083811115613e3157613e3061319e565b5b613e60565b613e438484846001613d41565b92509050818404811115613e5a57613e5961319e565b5b81810290505b9392505050565b6000613e7282612bd3565b9150613e7d83612eec565b9250613eaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d94565b905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0e602183612b27565b9150613f1982613eb2565b604082019050919050565b60006020820190508181036000830152613f3d81613f01565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa0602283612b27565b9150613fab82613f44565b604082019050919050565b60006020820190508181036000830152613fcf81613f93565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061400c601d83612b27565b915061401782613fd6565b602082019050919050565b6000602082019050818103600083015261403b81613fff565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061409e602583612b27565b91506140a982614042565b604082019050919050565b600060208201905081810360008301526140cd81614091565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614130602383612b27565b915061413b826140d4565b604082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006141c2602683612b27565b91506141cd82614166565b604082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061422e602083612b27565b9150614239826141f8565b602082019050919050565b6000602082019050818103600083015261425d81614221565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061429a601f83612b27565b91506142a582614264565b602082019050919050565b600060208201905081810360008301526142c98161428d565b905091905056fea2646970667358221220e9c358a93eb3b2ec7f4195a1b2fbc9de5183cde617486da61d01d6f17a52581764736f6c634300081100330000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c53000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000008000000000000000000000000043d903211ae9afdbda240e39fcaeb5dd7558e05b000000000000000000000000000000000000000000000000000000000000000b42555344555344545f4c50000000000000000000000000000000000000000000