Files
assetxContracts/out/SafeERC20.sol/SafeERC20.json
2025-12-23 14:05:41 +08:00

1 line
125 KiB
JSON

{"abi":[{"type":"error","name":"SafeERC20FailedDecreaseAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"currentAllowance","type":"uint256","internalType":"uint256"},{"name":"requestedDecrease","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f6eb94fb7364ddc783c14449ce8b01892d8e28783e3cf844ef8b1af3c6ab781964736f6c634300081e0033","sourceMap":"698:9376:44:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x5f80fdfea2646970667358221220f6eb94fb7364ddc783c14449ce8b01892d8e28783e3cf844ef8b1af3c6ab781964736f6c634300081e0033","sourceMap":"698:9376:44:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=node_modules/@ensdomains/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\"],\"viaIR\":true},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"type":"error","name":"SafeERC20FailedDecreaseAllowance"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@ensdomains/=node_modules/@ensdomains/","@openzeppelin/=node_modules/@openzeppelin/","forge-std/=lib/forge-std/src/","hardhat/=node_modules/hardhat/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":"SafeERC20"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol":{"keccak256":"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d","urls":["bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100","dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"],"license":"MIT"},"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol":{"keccak256":"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc","urls":["bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037","dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"],"license":"MIT"},"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol":{"keccak256":"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44","urls":["bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d","dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"],"license":"MIT"},"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5","urls":["bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508","dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c","urls":["bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617","dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"],"license":"MIT"}},"version":1},"ast":{"absolutePath":"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":13139,"exportedSymbols":{"IERC1363":[12016],"IERC20":[12648],"SafeERC20":[13138]},"nodeType":"SourceUnit","src":"115:9960:44","nodes":[{"id":12676,"nodeType":"PragmaDirective","src":"115:24:44","nodes":[],"literals":["solidity","^","0.8",".20"]},{"id":12678,"nodeType":"ImportDirective","src":"141:37:44","nodes":[],"absolutePath":"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","nameLocation":"-1:-1:-1","scope":13139,"sourceUnit":12649,"symbolAliases":[{"foreign":{"id":12677,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12648,"src":"149:6:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":12680,"nodeType":"ImportDirective","src":"179:58:44","nodes":[],"absolutePath":"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol","file":"../../../interfaces/IERC1363.sol","nameLocation":"-1:-1:-1","scope":13139,"sourceUnit":12017,"symbolAliases":[{"foreign":{"id":12679,"name":"IERC1363","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12016,"src":"187:8:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":13138,"nodeType":"ContractDefinition","src":"698:9376:44","nodes":[{"id":12686,"nodeType":"ErrorDefinition","src":"792:46:44","nodes":[],"documentation":{"id":12682,"nodeType":"StructuredDocumentation","src":"722:65:44","text":" @dev An operation with an ERC-20 token failed."},"errorSelector":"5274afe7","name":"SafeERC20FailedOperation","nameLocation":"798:24:44","parameters":{"id":12685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12684,"mutability":"mutable","name":"token","nameLocation":"831:5:44","nodeType":"VariableDeclaration","scope":12686,"src":"823:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12683,"name":"address","nodeType":"ElementaryTypeName","src":"823:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"822:15:44"}},{"id":12695,"nodeType":"ErrorDefinition","src":"920:109:44","nodes":[],"documentation":{"id":12687,"nodeType":"StructuredDocumentation","src":"844:71:44","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","name":"SafeERC20FailedDecreaseAllowance","nameLocation":"926:32:44","parameters":{"id":12694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12689,"mutability":"mutable","name":"spender","nameLocation":"967:7:44","nodeType":"VariableDeclaration","scope":12695,"src":"959:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12688,"name":"address","nodeType":"ElementaryTypeName","src":"959:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12691,"mutability":"mutable","name":"currentAllowance","nameLocation":"984:16:44","nodeType":"VariableDeclaration","scope":12695,"src":"976:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12690,"name":"uint256","nodeType":"ElementaryTypeName","src":"976:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12693,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1010:17:44","nodeType":"VariableDeclaration","scope":12695,"src":"1002:25:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12692,"name":"uint256","nodeType":"ElementaryTypeName","src":"1002:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"958:70:44"}},{"id":12719,"nodeType":"FunctionDefinition","src":"1219:160:44","nodes":[],"body":{"id":12718,"nodeType":"Block","src":"1291:88:44","nodes":[],"statements":[{"expression":{"arguments":[{"id":12707,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12699,"src":"1321:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":12710,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12699,"src":"1343:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"id":12711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1349:8:44","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":12615,"src":"1343:14:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":12712,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12701,"src":"1360:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12713,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12703,"src":"1364:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12714,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1359:11:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":12708,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1328:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1332:10:44","memberName":"encodeCall","nodeType":"MemberAccess","src":"1328:14:44","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1328:43:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12706,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13096,"src":"1301:19:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":12716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1301:71:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12717,"nodeType":"ExpressionStatement","src":"1301:71:44"}]},"documentation":{"id":12696,"nodeType":"StructuredDocumentation","src":"1035:179:44","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1228:12:44","parameters":{"id":12704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12699,"mutability":"mutable","name":"token","nameLocation":"1248:5:44","nodeType":"VariableDeclaration","scope":12719,"src":"1241:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":12698,"nodeType":"UserDefinedTypeName","pathNode":{"id":12697,"name":"IERC20","nameLocations":["1241:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"1241:6:44"},"referencedDeclaration":12648,"src":"1241:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":12701,"mutability":"mutable","name":"to","nameLocation":"1263:2:44","nodeType":"VariableDeclaration","scope":12719,"src":"1255:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12700,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12703,"mutability":"mutable","name":"value","nameLocation":"1275:5:44","nodeType":"VariableDeclaration","scope":12719,"src":"1267:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12702,"name":"uint256","nodeType":"ElementaryTypeName","src":"1267:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1240:41:44"},"returnParameters":{"id":12705,"nodeType":"ParameterList","parameters":[],"src":"1291:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":12746,"nodeType":"FunctionDefinition","src":"1618:188:44","nodes":[],"body":{"id":12745,"nodeType":"Block","src":"1708:98:44","nodes":[],"statements":[{"expression":{"arguments":[{"id":12733,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12723,"src":"1738:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":12736,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12723,"src":"1760:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"id":12737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1766:12:44","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":12647,"src":"1760:18:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":12738,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12725,"src":"1781:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12739,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12727,"src":"1787:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12740,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12729,"src":"1791:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12741,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1780:17:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":12734,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1745:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1749:10:44","memberName":"encodeCall","nodeType":"MemberAccess","src":"1745:14:44","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1745:53:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12732,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13096,"src":"1718:19:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":12743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1718:81:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12744,"nodeType":"ExpressionStatement","src":"1718:81:44"}]},"documentation":{"id":12720,"nodeType":"StructuredDocumentation","src":"1385:228:44","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1627:16:44","parameters":{"id":12730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12723,"mutability":"mutable","name":"token","nameLocation":"1651:5:44","nodeType":"VariableDeclaration","scope":12746,"src":"1644:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":12722,"nodeType":"UserDefinedTypeName","pathNode":{"id":12721,"name":"IERC20","nameLocations":["1644:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"1644:6:44"},"referencedDeclaration":12648,"src":"1644:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":12725,"mutability":"mutable","name":"from","nameLocation":"1666:4:44","nodeType":"VariableDeclaration","scope":12746,"src":"1658:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12724,"name":"address","nodeType":"ElementaryTypeName","src":"1658:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12727,"mutability":"mutable","name":"to","nameLocation":"1680:2:44","nodeType":"VariableDeclaration","scope":12746,"src":"1672:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12726,"name":"address","nodeType":"ElementaryTypeName","src":"1672:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12729,"mutability":"mutable","name":"value","nameLocation":"1692:5:44","nodeType":"VariableDeclaration","scope":12746,"src":"1684:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12728,"name":"uint256","nodeType":"ElementaryTypeName","src":"1684:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1643:55:44"},"returnParameters":{"id":12731,"nodeType":"ParameterList","parameters":[],"src":"1708:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":12772,"nodeType":"FunctionDefinition","src":"1943:189:44","nodes":[],"body":{"id":12771,"nodeType":"Block","src":"2033:99:44","nodes":[],"statements":[{"expression":{"arguments":[{"id":12760,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12750,"src":"2074:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":12763,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12750,"src":"2096:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"id":12764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2102:8:44","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":12615,"src":"2096:14:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":12765,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12752,"src":"2113:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12766,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12754,"src":"2117:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12767,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2112:11:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":12761,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2081:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2085:10:44","memberName":"encodeCall","nodeType":"MemberAccess","src":"2081:14:44","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:43:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12759,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13137,"src":"2050:23:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":12769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2050:75:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12758,"id":12770,"nodeType":"Return","src":"2043:82:44"}]},"documentation":{"id":12747,"nodeType":"StructuredDocumentation","src":"1812:126:44","text":" @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful."},"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransfer","nameLocation":"1952:15:44","parameters":{"id":12755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12750,"mutability":"mutable","name":"token","nameLocation":"1975:5:44","nodeType":"VariableDeclaration","scope":12772,"src":"1968:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":12749,"nodeType":"UserDefinedTypeName","pathNode":{"id":12748,"name":"IERC20","nameLocations":["1968:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"1968:6:44"},"referencedDeclaration":12648,"src":"1968:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":12752,"mutability":"mutable","name":"to","nameLocation":"1990:2:44","nodeType":"VariableDeclaration","scope":12772,"src":"1982:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12751,"name":"address","nodeType":"ElementaryTypeName","src":"1982:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12754,"mutability":"mutable","name":"value","nameLocation":"2002:5:44","nodeType":"VariableDeclaration","scope":12772,"src":"1994:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12753,"name":"uint256","nodeType":"ElementaryTypeName","src":"1994:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1967:41:44"},"returnParameters":{"id":12758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12772,"src":"2027:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12756,"name":"bool","nodeType":"ElementaryTypeName","src":"2027:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2026:6:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":12801,"nodeType":"FunctionDefinition","src":"2273:217:44","nodes":[],"body":{"id":12800,"nodeType":"Block","src":"2381:109:44","nodes":[],"statements":[{"expression":{"arguments":[{"id":12788,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12776,"src":"2422:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":12791,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12776,"src":"2444:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"id":12792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2450:12:44","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":12647,"src":"2444:18:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":12793,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12778,"src":"2465:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12794,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12780,"src":"2471:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12795,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12782,"src":"2475:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12796,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2464:17:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":12789,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2429:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2433:10:44","memberName":"encodeCall","nodeType":"MemberAccess","src":"2429:14:44","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2429:53:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12787,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13137,"src":"2398:23:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":12798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2398:85:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12786,"id":12799,"nodeType":"Return","src":"2391:92:44"}]},"documentation":{"id":12773,"nodeType":"StructuredDocumentation","src":"2138:130:44","text":" @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful."},"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransferFrom","nameLocation":"2282:19:44","parameters":{"id":12783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12776,"mutability":"mutable","name":"token","nameLocation":"2309:5:44","nodeType":"VariableDeclaration","scope":12801,"src":"2302:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":12775,"nodeType":"UserDefinedTypeName","pathNode":{"id":12774,"name":"IERC20","nameLocations":["2302:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"2302:6:44"},"referencedDeclaration":12648,"src":"2302:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":12778,"mutability":"mutable","name":"from","nameLocation":"2324:4:44","nodeType":"VariableDeclaration","scope":12801,"src":"2316:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12777,"name":"address","nodeType":"ElementaryTypeName","src":"2316:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12780,"mutability":"mutable","name":"to","nameLocation":"2338:2:44","nodeType":"VariableDeclaration","scope":12801,"src":"2330:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12779,"name":"address","nodeType":"ElementaryTypeName","src":"2330:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12782,"mutability":"mutable","name":"value","nameLocation":"2350:5:44","nodeType":"VariableDeclaration","scope":12801,"src":"2342:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12781,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2301:55:44"},"returnParameters":{"id":12786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12785,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12801,"src":"2375:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12784,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":12832,"nodeType":"FunctionDefinition","src":"3146:225:44","nodes":[],"body":{"id":12831,"nodeType":"Block","src":"3232:139:44","nodes":[],"statements":[{"assignments":[12813],"declarations":[{"constant":false,"id":12813,"mutability":"mutable","name":"oldAllowance","nameLocation":"3250:12:44","nodeType":"VariableDeclaration","scope":12831,"src":"3242:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12812,"name":"uint256","nodeType":"ElementaryTypeName","src":"3242:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12822,"initialValue":{"arguments":[{"arguments":[{"id":12818,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3289:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$13138","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$13138","typeString":"library SafeERC20"}],"id":12817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3281:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12816,"name":"address","nodeType":"ElementaryTypeName","src":"3281:7:44","typeDescriptions":{}}},"id":12819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3281:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12820,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12807,"src":"3296:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12814,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12805,"src":"3265:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"id":12815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3271:9:44","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":12625,"src":"3265:15:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":12821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3265:39:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3242:62:44"},{"expression":{"arguments":[{"id":12824,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12805,"src":"3327:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"id":12825,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12807,"src":"3334:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12826,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12813,"src":"3343:12:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12827,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12809,"src":"3358:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3343:20:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12823,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12922,"src":"3314:12:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":12829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3314:50:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12830,"nodeType":"ExpressionStatement","src":"3314:50:44"}]},"documentation":{"id":12802,"nodeType":"StructuredDocumentation","src":"2496:645:44","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"3155:21:44","parameters":{"id":12810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12805,"mutability":"mutable","name":"token","nameLocation":"3184:5:44","nodeType":"VariableDeclaration","scope":12832,"src":"3177:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":12804,"nodeType":"UserDefinedTypeName","pathNode":{"id":12803,"name":"IERC20","nameLocations":["3177:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"3177:6:44"},"referencedDeclaration":12648,"src":"3177:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":12807,"mutability":"mutable","name":"spender","nameLocation":"3199:7:44","nodeType":"VariableDeclaration","scope":12832,"src":"3191:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12806,"name":"address","nodeType":"ElementaryTypeName","src":"3191:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12809,"mutability":"mutable","name":"value","nameLocation":"3216:5:44","nodeType":"VariableDeclaration","scope":12832,"src":"3208:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12808,"name":"uint256","nodeType":"ElementaryTypeName","src":"3208:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3176:46:44"},"returnParameters":{"id":12811,"nodeType":"ParameterList","parameters":[],"src":"3232:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":12875,"nodeType":"FunctionDefinition","src":"4039:468:44","nodes":[],"body":{"id":12874,"nodeType":"Block","src":"4137:370:44","nodes":[],"statements":[{"id":12873,"nodeType":"UncheckedBlock","src":"4147:354:44","statements":[{"assignments":[12844],"declarations":[{"constant":false,"id":12844,"mutability":"mutable","name":"currentAllowance","nameLocation":"4179:16:44","nodeType":"VariableDeclaration","scope":12873,"src":"4171:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12843,"name":"uint256","nodeType":"ElementaryTypeName","src":"4171:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12853,"initialValue":{"arguments":[{"arguments":[{"id":12849,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4222:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$13138","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$13138","typeString":"library SafeERC20"}],"id":12848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4214:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12847,"name":"address","nodeType":"ElementaryTypeName","src":"4214:7:44","typeDescriptions":{}}},"id":12850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4214:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12851,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12838,"src":"4229:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12845,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12836,"src":"4198:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"id":12846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4204:9:44","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":12625,"src":"4198:15:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":12852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4198:39:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4171:66:44"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12854,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12844,"src":"4255:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12855,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12840,"src":"4274:17:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4255:36:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12864,"nodeType":"IfStatement","src":"4251:160:44","trueBody":{"id":12863,"nodeType":"Block","src":"4293:118:44","statements":[{"errorCall":{"arguments":[{"id":12858,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12838,"src":"4351:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12859,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12844,"src":"4360:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12860,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12840,"src":"4378:17:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12857,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12695,"src":"4318:32:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":12861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:78:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12862,"nodeType":"RevertStatement","src":"4311:85:44"}]}},{"expression":{"arguments":[{"id":12866,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12836,"src":"4437:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"id":12867,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12838,"src":"4444:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12868,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12844,"src":"4453:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12869,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12840,"src":"4472:17:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4453:36:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12865,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12922,"src":"4424:12:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":12871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:66:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12872,"nodeType":"ExpressionStatement","src":"4424:66:44"}]}]},"documentation":{"id":12833,"nodeType":"StructuredDocumentation","src":"3377:657:44","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"4048:21:44","parameters":{"id":12841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12836,"mutability":"mutable","name":"token","nameLocation":"4077:5:44","nodeType":"VariableDeclaration","scope":12875,"src":"4070:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":12835,"nodeType":"UserDefinedTypeName","pathNode":{"id":12834,"name":"IERC20","nameLocations":["4070:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"4070:6:44"},"referencedDeclaration":12648,"src":"4070:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":12838,"mutability":"mutable","name":"spender","nameLocation":"4092:7:44","nodeType":"VariableDeclaration","scope":12875,"src":"4084:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12837,"name":"address","nodeType":"ElementaryTypeName","src":"4084:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12840,"mutability":"mutable","name":"requestedDecrease","nameLocation":"4109:17:44","nodeType":"VariableDeclaration","scope":12875,"src":"4101:25:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12839,"name":"uint256","nodeType":"ElementaryTypeName","src":"4101:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4069:58:44"},"returnParameters":{"id":12842,"nodeType":"ParameterList","parameters":[],"src":"4137:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":12922,"nodeType":"FunctionDefinition","src":"5084:380:44","nodes":[],"body":{"id":12921,"nodeType":"Block","src":"5161:303:44","nodes":[],"statements":[{"assignments":[12887],"declarations":[{"constant":false,"id":12887,"mutability":"mutable","name":"approvalCall","nameLocation":"5184:12:44","nodeType":"VariableDeclaration","scope":12921,"src":"5171:25:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12886,"name":"bytes","nodeType":"ElementaryTypeName","src":"5171:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":12896,"initialValue":{"arguments":[{"expression":{"id":12890,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12879,"src":"5214:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"id":12891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5220:7:44","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":12635,"src":"5214:13:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":12892,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12881,"src":"5230:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12893,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12883,"src":"5239:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12894,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5229:16:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":12888,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5199:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12889,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5203:10:44","memberName":"encodeCall","nodeType":"MemberAccess","src":"5199:14:44","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5199:47:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5171:75:44"},{"condition":{"id":12901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5261:45:44","subExpression":{"arguments":[{"id":12898,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12879,"src":"5286:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"id":12899,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12887,"src":"5293:12:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12897,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13137,"src":"5262:23:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":12900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5262:44:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12920,"nodeType":"IfStatement","src":"5257:201:44","trueBody":{"id":12919,"nodeType":"Block","src":"5308:150:44","statements":[{"expression":{"arguments":[{"id":12903,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12879,"src":"5342:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":12906,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12879,"src":"5364:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"id":12907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5370:7:44","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":12635,"src":"5364:13:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":12908,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12881,"src":"5380:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":12909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5389:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":12910,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5379:12:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":12904,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5349:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5353:10:44","memberName":"encodeCall","nodeType":"MemberAccess","src":"5349:14:44","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5349:43:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12902,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13096,"src":"5322:19:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":12912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5322:71:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12913,"nodeType":"ExpressionStatement","src":"5322:71:44"},{"expression":{"arguments":[{"id":12915,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12879,"src":"5427:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},{"id":12916,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12887,"src":"5434:12:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12914,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13096,"src":"5407:19:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":12917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5407:40:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12918,"nodeType":"ExpressionStatement","src":"5407:40:44"}]}}]},"documentation":{"id":12876,"nodeType":"StructuredDocumentation","src":"4513:566:44","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT.\n NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n set here."},"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"5093:12:44","parameters":{"id":12884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12879,"mutability":"mutable","name":"token","nameLocation":"5113:5:44","nodeType":"VariableDeclaration","scope":12922,"src":"5106:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":12878,"nodeType":"UserDefinedTypeName","pathNode":{"id":12877,"name":"IERC20","nameLocations":["5106:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"5106:6:44"},"referencedDeclaration":12648,"src":"5106:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":12881,"mutability":"mutable","name":"spender","nameLocation":"5128:7:44","nodeType":"VariableDeclaration","scope":12922,"src":"5120:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12880,"name":"address","nodeType":"ElementaryTypeName","src":"5120:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12883,"mutability":"mutable","name":"value","nameLocation":"5145:5:44","nodeType":"VariableDeclaration","scope":12922,"src":"5137:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12882,"name":"uint256","nodeType":"ElementaryTypeName","src":"5137:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5105:46:44"},"returnParameters":{"id":12885,"nodeType":"ParameterList","parameters":[],"src":"5161:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":12965,"nodeType":"FunctionDefinition","src":"5808:322:44","nodes":[],"body":{"id":12964,"nodeType":"Block","src":"5911:219:44","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":12935,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12928,"src":"5925:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5928:4:44","memberName":"code","nodeType":"MemberAccess","src":"5925:7:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":12937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5933:6:44","memberName":"length","nodeType":"MemberAccess","src":"5925:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5943:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5925:19:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":12953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6011:39:44","subExpression":{"arguments":[{"id":12949,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12928,"src":"6034:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12950,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12930,"src":"6038:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12951,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12932,"src":"6045:4:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":12947,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12926,"src":"6012:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},"id":12948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6018:15:44","memberName":"transferAndCall","nodeType":"MemberAccess","referencedDeclaration":11967,"src":"6012:21:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":12952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6012:38:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12962,"nodeType":"IfStatement","src":"6007:117:44","trueBody":{"id":12961,"nodeType":"Block","src":"6052:72:44","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":12957,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12926,"src":"6106:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}],"id":12956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6098:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12955,"name":"address","nodeType":"ElementaryTypeName","src":"6098:7:44","typeDescriptions":{}}},"id":12958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6098:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12954,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12686,"src":"6073:24:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":12959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6073:40:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12960,"nodeType":"RevertStatement","src":"6066:47:44"}]}},"id":12963,"nodeType":"IfStatement","src":"5921:203:44","trueBody":{"id":12946,"nodeType":"Block","src":"5946:55:44","statements":[{"expression":{"arguments":[{"id":12941,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12926,"src":"5973:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},{"id":12942,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12928,"src":"5980:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12943,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12930,"src":"5984:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12940,"name":"safeTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12719,"src":"5960:12:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":12944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5960:30:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12945,"nodeType":"ExpressionStatement","src":"5960:30:44"}]}}]},"documentation":{"id":12923,"nodeType":"StructuredDocumentation","src":"5470:333:44","text":" @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"implemented":true,"kind":"function","modifiers":[],"name":"transferAndCallRelaxed","nameLocation":"5817:22:44","parameters":{"id":12933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12926,"mutability":"mutable","name":"token","nameLocation":"5849:5:44","nodeType":"VariableDeclaration","scope":12965,"src":"5840:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"},"typeName":{"id":12925,"nodeType":"UserDefinedTypeName","pathNode":{"id":12924,"name":"IERC1363","nameLocations":["5840:8:44"],"nodeType":"IdentifierPath","referencedDeclaration":12016,"src":"5840:8:44"},"referencedDeclaration":12016,"src":"5840:8:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":12928,"mutability":"mutable","name":"to","nameLocation":"5864:2:44","nodeType":"VariableDeclaration","scope":12965,"src":"5856:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12927,"name":"address","nodeType":"ElementaryTypeName","src":"5856:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12930,"mutability":"mutable","name":"value","nameLocation":"5876:5:44","nodeType":"VariableDeclaration","scope":12965,"src":"5868:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12929,"name":"uint256","nodeType":"ElementaryTypeName","src":"5868:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12932,"mutability":"mutable","name":"data","nameLocation":"5896:4:44","nodeType":"VariableDeclaration","scope":12965,"src":"5883:17:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12931,"name":"bytes","nodeType":"ElementaryTypeName","src":"5883:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5839:62:44"},"returnParameters":{"id":12934,"nodeType":"ParameterList","parameters":[],"src":"5911:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":13012,"nodeType":"FunctionDefinition","src":"6482:406:44","nodes":[],"body":{"id":13011,"nodeType":"Block","src":"6649:239:44","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":12980,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12973,"src":"6663:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6666:4:44","memberName":"code","nodeType":"MemberAccess","src":"6663:7:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":12982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6671:6:44","memberName":"length","nodeType":"MemberAccess","src":"6663:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6681:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6663:19:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":13000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6759:49:44","subExpression":{"arguments":[{"id":12995,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12971,"src":"6786:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12996,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12973,"src":"6792:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12997,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12975,"src":"6796:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12998,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12977,"src":"6803:4:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":12993,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12969,"src":"6760:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},"id":12994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6766:19:44","memberName":"transferFromAndCall","nodeType":"MemberAccess","referencedDeclaration":11993,"src":"6760:25:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,uint256,bytes memory) external returns (bool)"}},"id":12999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6760:48:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13009,"nodeType":"IfStatement","src":"6755:127:44","trueBody":{"id":13008,"nodeType":"Block","src":"6810:72:44","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":13004,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12969,"src":"6864:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}],"id":13003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6856:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13002,"name":"address","nodeType":"ElementaryTypeName","src":"6856:7:44","typeDescriptions":{}}},"id":13005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6856:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13001,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12686,"src":"6831:24:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":13006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6831:40:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13007,"nodeType":"RevertStatement","src":"6824:47:44"}]}},"id":13010,"nodeType":"IfStatement","src":"6659:223:44","trueBody":{"id":12992,"nodeType":"Block","src":"6684:65:44","statements":[{"expression":{"arguments":[{"id":12986,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12969,"src":"6715:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},{"id":12987,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12971,"src":"6722:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12988,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12973,"src":"6728:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12989,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12975,"src":"6732:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12985,"name":"safeTransferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12746,"src":"6698:16:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":12990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6698:40:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12991,"nodeType":"ExpressionStatement","src":"6698:40:44"}]}}]},"documentation":{"id":12966,"nodeType":"StructuredDocumentation","src":"6136:341:44","text":" @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"implemented":true,"kind":"function","modifiers":[],"name":"transferFromAndCallRelaxed","nameLocation":"6491:26:44","parameters":{"id":12978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12969,"mutability":"mutable","name":"token","nameLocation":"6536:5:44","nodeType":"VariableDeclaration","scope":13012,"src":"6527:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"},"typeName":{"id":12968,"nodeType":"UserDefinedTypeName","pathNode":{"id":12967,"name":"IERC1363","nameLocations":["6527:8:44"],"nodeType":"IdentifierPath","referencedDeclaration":12016,"src":"6527:8:44"},"referencedDeclaration":12016,"src":"6527:8:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":12971,"mutability":"mutable","name":"from","nameLocation":"6559:4:44","nodeType":"VariableDeclaration","scope":13012,"src":"6551:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12970,"name":"address","nodeType":"ElementaryTypeName","src":"6551:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12973,"mutability":"mutable","name":"to","nameLocation":"6581:2:44","nodeType":"VariableDeclaration","scope":13012,"src":"6573:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12972,"name":"address","nodeType":"ElementaryTypeName","src":"6573:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12975,"mutability":"mutable","name":"value","nameLocation":"6601:5:44","nodeType":"VariableDeclaration","scope":13012,"src":"6593:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12974,"name":"uint256","nodeType":"ElementaryTypeName","src":"6593:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12977,"mutability":"mutable","name":"data","nameLocation":"6629:4:44","nodeType":"VariableDeclaration","scope":13012,"src":"6616:17:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12976,"name":"bytes","nodeType":"ElementaryTypeName","src":"6616:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6517:122:44"},"returnParameters":{"id":12979,"nodeType":"ParameterList","parameters":[],"src":"6649:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":13055,"nodeType":"FunctionDefinition","src":"7553:320:44","nodes":[],"body":{"id":13054,"nodeType":"Block","src":"7655:218:44","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":13025,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13018,"src":"7669:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7672:4:44","memberName":"code","nodeType":"MemberAccess","src":"7669:7:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7677:6:44","memberName":"length","nodeType":"MemberAccess","src":"7669:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7687:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7669:19:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":13043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7755:38:44","subExpression":{"arguments":[{"id":13039,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13018,"src":"7777:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13040,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13020,"src":"7781:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13041,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13022,"src":"7788:4:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13037,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13016,"src":"7756:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},"id":13038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7762:14:44","memberName":"approveAndCall","nodeType":"MemberAccess","referencedDeclaration":12015,"src":"7756:20:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":13042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7756:37:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13052,"nodeType":"IfStatement","src":"7751:116:44","trueBody":{"id":13051,"nodeType":"Block","src":"7795:72:44","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":13047,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13016,"src":"7849:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}],"id":13046,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7841:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13045,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:44","typeDescriptions":{}}},"id":13048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13044,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12686,"src":"7816:24:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":13049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7816:40:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13050,"nodeType":"RevertStatement","src":"7809:47:44"}]}},"id":13053,"nodeType":"IfStatement","src":"7665:202:44","trueBody":{"id":13036,"nodeType":"Block","src":"7690:55:44","statements":[{"expression":{"arguments":[{"id":13031,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13016,"src":"7717:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},{"id":13032,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13018,"src":"7724:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13033,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13020,"src":"7728:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13030,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12922,"src":"7704:12:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$12648_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":13034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7704:30:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13035,"nodeType":"ExpressionStatement","src":"7704:30:44"}]}}]},"documentation":{"id":13013,"nodeType":"StructuredDocumentation","src":"6894:654:44","text":" @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n once without retrying, and relies on the returned value to be true.\n Reverts if the returned value is other than `true`."},"implemented":true,"kind":"function","modifiers":[],"name":"approveAndCallRelaxed","nameLocation":"7562:21:44","parameters":{"id":13023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13016,"mutability":"mutable","name":"token","nameLocation":"7593:5:44","nodeType":"VariableDeclaration","scope":13055,"src":"7584:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"},"typeName":{"id":13015,"nodeType":"UserDefinedTypeName","pathNode":{"id":13014,"name":"IERC1363","nameLocations":["7584:8:44"],"nodeType":"IdentifierPath","referencedDeclaration":12016,"src":"7584:8:44"},"referencedDeclaration":12016,"src":"7584:8:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$12016","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":13018,"mutability":"mutable","name":"to","nameLocation":"7608:2:44","nodeType":"VariableDeclaration","scope":13055,"src":"7600:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13017,"name":"address","nodeType":"ElementaryTypeName","src":"7600:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13020,"mutability":"mutable","name":"value","nameLocation":"7620:5:44","nodeType":"VariableDeclaration","scope":13055,"src":"7612:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13019,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13022,"mutability":"mutable","name":"data","nameLocation":"7640:4:44","nodeType":"VariableDeclaration","scope":13055,"src":"7627:17:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13021,"name":"bytes","nodeType":"ElementaryTypeName","src":"7627:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7583:62:44"},"returnParameters":{"id":13024,"nodeType":"ParameterList","parameters":[],"src":"7655:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":13096,"nodeType":"FunctionDefinition","src":"8370:720:44","nodes":[],"body":{"id":13095,"nodeType":"Block","src":"8440:650:44","nodes":[],"statements":[{"assignments":[13065],"declarations":[{"constant":false,"id":13065,"mutability":"mutable","name":"returnSize","nameLocation":"8458:10:44","nodeType":"VariableDeclaration","scope":13095,"src":"8450:18:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13064,"name":"uint256","nodeType":"ElementaryTypeName","src":"8450:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13066,"nodeType":"VariableDeclarationStatement","src":"8450:18:44"},{"assignments":[13068],"declarations":[{"constant":false,"id":13068,"mutability":"mutable","name":"returnValue","nameLocation":"8486:11:44","nodeType":"VariableDeclaration","scope":13095,"src":"8478:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13067,"name":"uint256","nodeType":"ElementaryTypeName","src":"8478:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13069,"nodeType":"VariableDeclarationStatement","src":"8478:19:44"},{"AST":{"nativeSrc":"8532:396:44","nodeType":"YulBlock","src":"8532:396:44","statements":[{"nativeSrc":"8546:75:44","nodeType":"YulVariableDeclaration","src":"8546:75:44","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"8566:3:44","nodeType":"YulIdentifier","src":"8566:3:44"},"nativeSrc":"8566:5:44","nodeType":"YulFunctionCall","src":"8566:5:44"},{"name":"token","nativeSrc":"8573:5:44","nodeType":"YulIdentifier","src":"8573:5:44"},{"kind":"number","nativeSrc":"8580:1:44","nodeType":"YulLiteral","src":"8580:1:44","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"8587:4:44","nodeType":"YulIdentifier","src":"8587:4:44"},{"kind":"number","nativeSrc":"8593:4:44","nodeType":"YulLiteral","src":"8593:4:44","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8583:3:44","nodeType":"YulIdentifier","src":"8583:3:44"},"nativeSrc":"8583:15:44","nodeType":"YulFunctionCall","src":"8583:15:44"},{"arguments":[{"name":"data","nativeSrc":"8606:4:44","nodeType":"YulIdentifier","src":"8606:4:44"}],"functionName":{"name":"mload","nativeSrc":"8600:5:44","nodeType":"YulIdentifier","src":"8600:5:44"},"nativeSrc":"8600:11:44","nodeType":"YulFunctionCall","src":"8600:11:44"},{"kind":"number","nativeSrc":"8613:1:44","nodeType":"YulLiteral","src":"8613:1:44","type":"","value":"0"},{"kind":"number","nativeSrc":"8616:4:44","nodeType":"YulLiteral","src":"8616:4:44","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"8561:4:44","nodeType":"YulIdentifier","src":"8561:4:44"},"nativeSrc":"8561:60:44","nodeType":"YulFunctionCall","src":"8561:60:44"},"variables":[{"name":"success","nativeSrc":"8550:7:44","nodeType":"YulTypedName","src":"8550:7:44","type":""}]},{"body":{"nativeSrc":"8682:157:44","nodeType":"YulBlock","src":"8682:157:44","statements":[{"nativeSrc":"8700:22:44","nodeType":"YulVariableDeclaration","src":"8700:22:44","value":{"arguments":[{"kind":"number","nativeSrc":"8717:4:44","nodeType":"YulLiteral","src":"8717:4:44","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"8711:5:44","nodeType":"YulIdentifier","src":"8711:5:44"},"nativeSrc":"8711:11:44","nodeType":"YulFunctionCall","src":"8711:11:44"},"variables":[{"name":"ptr","nativeSrc":"8704:3:44","nodeType":"YulTypedName","src":"8704:3:44","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8754:3:44","nodeType":"YulIdentifier","src":"8754:3:44"},{"kind":"number","nativeSrc":"8759:1:44","nodeType":"YulLiteral","src":"8759:1:44","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8762:14:44","nodeType":"YulIdentifier","src":"8762:14:44"},"nativeSrc":"8762:16:44","nodeType":"YulFunctionCall","src":"8762:16:44"}],"functionName":{"name":"returndatacopy","nativeSrc":"8739:14:44","nodeType":"YulIdentifier","src":"8739:14:44"},"nativeSrc":"8739:40:44","nodeType":"YulFunctionCall","src":"8739:40:44"},"nativeSrc":"8739:40:44","nodeType":"YulExpressionStatement","src":"8739:40:44"},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8803:3:44","nodeType":"YulIdentifier","src":"8803:3:44"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8808:14:44","nodeType":"YulIdentifier","src":"8808:14:44"},"nativeSrc":"8808:16:44","nodeType":"YulFunctionCall","src":"8808:16:44"}],"functionName":{"name":"revert","nativeSrc":"8796:6:44","nodeType":"YulIdentifier","src":"8796:6:44"},"nativeSrc":"8796:29:44","nodeType":"YulFunctionCall","src":"8796:29:44"},"nativeSrc":"8796:29:44","nodeType":"YulExpressionStatement","src":"8796:29:44"}]},"condition":{"arguments":[{"name":"success","nativeSrc":"8673:7:44","nodeType":"YulIdentifier","src":"8673:7:44"}],"functionName":{"name":"iszero","nativeSrc":"8666:6:44","nodeType":"YulIdentifier","src":"8666:6:44"},"nativeSrc":"8666:15:44","nodeType":"YulFunctionCall","src":"8666:15:44"},"nativeSrc":"8663:176:44","nodeType":"YulIf","src":"8663:176:44"},{"nativeSrc":"8852:30:44","nodeType":"YulAssignment","src":"8852:30:44","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8866:14:44","nodeType":"YulIdentifier","src":"8866:14:44"},"nativeSrc":"8866:16:44","nodeType":"YulFunctionCall","src":"8866:16:44"},"variableNames":[{"name":"returnSize","nativeSrc":"8852:10:44","nodeType":"YulIdentifier","src":"8852:10:44"}]},{"nativeSrc":"8895:23:44","nodeType":"YulAssignment","src":"8895:23:44","value":{"arguments":[{"kind":"number","nativeSrc":"8916:1:44","nodeType":"YulLiteral","src":"8916:1:44","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"8910:5:44","nodeType":"YulIdentifier","src":"8910:5:44"},"nativeSrc":"8910:8:44","nodeType":"YulFunctionCall","src":"8910:8:44"},"variableNames":[{"name":"returnValue","nativeSrc":"8895:11:44","nodeType":"YulIdentifier","src":"8895:11:44"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":13061,"isOffset":false,"isSlot":false,"src":"8587:4:44","valueSize":1},{"declaration":13061,"isOffset":false,"isSlot":false,"src":"8606:4:44","valueSize":1},{"declaration":13065,"isOffset":false,"isSlot":false,"src":"8852:10:44","valueSize":1},{"declaration":13068,"isOffset":false,"isSlot":false,"src":"8895:11:44","valueSize":1},{"declaration":13059,"isOffset":false,"isSlot":false,"src":"8573:5:44","valueSize":1}],"flags":["memory-safe"],"id":13070,"nodeType":"InlineAssembly","src":"8507:421:44"},{"condition":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13071,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13065,"src":"8942:10:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8956:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8942:15:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13082,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13068,"src":"8994:11:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":13083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9009:1:44","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8994:16:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8942:68:44","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":13076,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13059,"src":"8968:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}],"id":13075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8960:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13074,"name":"address","nodeType":"ElementaryTypeName","src":"8960:7:44","typeDescriptions":{}}},"id":13077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8960:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8975:4:44","memberName":"code","nodeType":"MemberAccess","src":"8960:19:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8980:6:44","memberName":"length","nodeType":"MemberAccess","src":"8960:26:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8990:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8960:31:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13094,"nodeType":"IfStatement","src":"8938:146:44","trueBody":{"id":13093,"nodeType":"Block","src":"9012:72:44","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":13089,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13059,"src":"9066:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}],"id":13088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9058:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13087,"name":"address","nodeType":"ElementaryTypeName","src":"9058:7:44","typeDescriptions":{}}},"id":13090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9058:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13086,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12686,"src":"9033:24:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":13091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9033:40:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13092,"nodeType":"RevertStatement","src":"9026:47:44"}]}}]},"documentation":{"id":13056,"nodeType":"StructuredDocumentation","src":"7879:486:44","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements."},"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"8379:19:44","parameters":{"id":13062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13059,"mutability":"mutable","name":"token","nameLocation":"8406:5:44","nodeType":"VariableDeclaration","scope":13096,"src":"8399:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":13058,"nodeType":"UserDefinedTypeName","pathNode":{"id":13057,"name":"IERC20","nameLocations":["8399:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"8399:6:44"},"referencedDeclaration":12648,"src":"8399:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13061,"mutability":"mutable","name":"data","nameLocation":"8426:4:44","nodeType":"VariableDeclaration","scope":13096,"src":"8413:17:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13060,"name":"bytes","nodeType":"ElementaryTypeName","src":"8413:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8398:33:44"},"returnParameters":{"id":13063,"nodeType":"ParameterList","parameters":[],"src":"8440:0:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":13137,"nodeType":"FunctionDefinition","src":"9592:480:44","nodes":[],"body":{"id":13136,"nodeType":"Block","src":"9681:391:44","nodes":[],"statements":[{"assignments":[13108],"declarations":[{"constant":false,"id":13108,"mutability":"mutable","name":"success","nameLocation":"9696:7:44","nodeType":"VariableDeclaration","scope":13136,"src":"9691:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13107,"name":"bool","nodeType":"ElementaryTypeName","src":"9691:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":13109,"nodeType":"VariableDeclarationStatement","src":"9691:12:44"},{"assignments":[13111],"declarations":[{"constant":false,"id":13111,"mutability":"mutable","name":"returnSize","nameLocation":"9721:10:44","nodeType":"VariableDeclaration","scope":13136,"src":"9713:18:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13110,"name":"uint256","nodeType":"ElementaryTypeName","src":"9713:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13112,"nodeType":"VariableDeclarationStatement","src":"9713:18:44"},{"assignments":[13114],"declarations":[{"constant":false,"id":13114,"mutability":"mutable","name":"returnValue","nameLocation":"9749:11:44","nodeType":"VariableDeclaration","scope":13136,"src":"9741:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13113,"name":"uint256","nodeType":"ElementaryTypeName","src":"9741:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13115,"nodeType":"VariableDeclarationStatement","src":"9741:19:44"},{"AST":{"nativeSrc":"9795:174:44","nodeType":"YulBlock","src":"9795:174:44","statements":[{"nativeSrc":"9809:71:44","nodeType":"YulAssignment","src":"9809:71:44","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"9825:3:44","nodeType":"YulIdentifier","src":"9825:3:44"},"nativeSrc":"9825:5:44","nodeType":"YulFunctionCall","src":"9825:5:44"},{"name":"token","nativeSrc":"9832:5:44","nodeType":"YulIdentifier","src":"9832:5:44"},{"kind":"number","nativeSrc":"9839:1:44","nodeType":"YulLiteral","src":"9839:1:44","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"9846:4:44","nodeType":"YulIdentifier","src":"9846:4:44"},{"kind":"number","nativeSrc":"9852:4:44","nodeType":"YulLiteral","src":"9852:4:44","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9842:3:44","nodeType":"YulIdentifier","src":"9842:3:44"},"nativeSrc":"9842:15:44","nodeType":"YulFunctionCall","src":"9842:15:44"},{"arguments":[{"name":"data","nativeSrc":"9865:4:44","nodeType":"YulIdentifier","src":"9865:4:44"}],"functionName":{"name":"mload","nativeSrc":"9859:5:44","nodeType":"YulIdentifier","src":"9859:5:44"},"nativeSrc":"9859:11:44","nodeType":"YulFunctionCall","src":"9859:11:44"},{"kind":"number","nativeSrc":"9872:1:44","nodeType":"YulLiteral","src":"9872:1:44","type":"","value":"0"},{"kind":"number","nativeSrc":"9875:4:44","nodeType":"YulLiteral","src":"9875:4:44","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"9820:4:44","nodeType":"YulIdentifier","src":"9820:4:44"},"nativeSrc":"9820:60:44","nodeType":"YulFunctionCall","src":"9820:60:44"},"variableNames":[{"name":"success","nativeSrc":"9809:7:44","nodeType":"YulIdentifier","src":"9809:7:44"}]},{"nativeSrc":"9893:30:44","nodeType":"YulAssignment","src":"9893:30:44","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"9907:14:44","nodeType":"YulIdentifier","src":"9907:14:44"},"nativeSrc":"9907:16:44","nodeType":"YulFunctionCall","src":"9907:16:44"},"variableNames":[{"name":"returnSize","nativeSrc":"9893:10:44","nodeType":"YulIdentifier","src":"9893:10:44"}]},{"nativeSrc":"9936:23:44","nodeType":"YulAssignment","src":"9936:23:44","value":{"arguments":[{"kind":"number","nativeSrc":"9957:1:44","nodeType":"YulLiteral","src":"9957:1:44","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"9951:5:44","nodeType":"YulIdentifier","src":"9951:5:44"},"nativeSrc":"9951:8:44","nodeType":"YulFunctionCall","src":"9951:8:44"},"variableNames":[{"name":"returnValue","nativeSrc":"9936:11:44","nodeType":"YulIdentifier","src":"9936:11:44"}]}]},"evmVersion":"prague","externalReferences":[{"declaration":13102,"isOffset":false,"isSlot":false,"src":"9846:4:44","valueSize":1},{"declaration":13102,"isOffset":false,"isSlot":false,"src":"9865:4:44","valueSize":1},{"declaration":13111,"isOffset":false,"isSlot":false,"src":"9893:10:44","valueSize":1},{"declaration":13114,"isOffset":false,"isSlot":false,"src":"9936:11:44","valueSize":1},{"declaration":13108,"isOffset":false,"isSlot":false,"src":"9809:7:44","valueSize":1},{"declaration":13100,"isOffset":false,"isSlot":false,"src":"9832:5:44","valueSize":1}],"flags":["memory-safe"],"id":13116,"nodeType":"InlineAssembly","src":"9770:199:44"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13117,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13108,"src":"9985:7:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13118,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"9997:10:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10011:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9997:15:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13129,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13114,"src":"10048:11:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":13130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10063:1:44","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10048:16:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9997:67:44","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":13123,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13100,"src":"10023:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}],"id":13122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10015:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13121,"name":"address","nodeType":"ElementaryTypeName","src":"10015:7:44","typeDescriptions":{}}},"id":13124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10015:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10030:4:44","memberName":"code","nodeType":"MemberAccess","src":"10015:19:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10035:6:44","memberName":"length","nodeType":"MemberAccess","src":"10015:26:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10044:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10015:30:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":13133,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9996:69:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9985:80:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13106,"id":13135,"nodeType":"Return","src":"9978:87:44"}]},"documentation":{"id":13097,"nodeType":"StructuredDocumentation","src":"9096:491:44","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead."},"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"9601:23:44","parameters":{"id":13103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13100,"mutability":"mutable","name":"token","nameLocation":"9632:5:44","nodeType":"VariableDeclaration","scope":13137,"src":"9625:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"},"typeName":{"id":13099,"nodeType":"UserDefinedTypeName","pathNode":{"id":13098,"name":"IERC20","nameLocations":["9625:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":12648,"src":"9625:6:44"},"referencedDeclaration":12648,"src":"9625:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$12648","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13102,"mutability":"mutable","name":"data","nameLocation":"9652:4:44","nodeType":"VariableDeclaration","scope":13137,"src":"9639:17:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13101,"name":"bytes","nodeType":"ElementaryTypeName","src":"9639:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9624:33:44"},"returnParameters":{"id":13106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13105,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13137,"src":"9675:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13104,"name":"bool","nodeType":"ElementaryTypeName","src":"9675:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9674:6:44"},"scope":13138,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":12681,"nodeType":"StructuredDocumentation","src":"239:458:44","text":" @title SafeERC20\n @dev Wrappers around ERC-20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"linearizedBaseContracts":[13138],"name":"SafeERC20","nameLocation":"706:9:44","scope":13139,"usedErrors":[12686,12695],"usedEvents":[]}],"license":"MIT"},"id":44}