@tokamak-network/thanos-contracts
Version:
1 lines • 80.3 kB
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":"0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000814000a","sourceMap":"751:5018:37:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;751:5018:37;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000814000a","sourceMap":"751:5018:37:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"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 ERC20 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 ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"shanghai\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":automate/=lib/automate/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gelato/=lib/automate/contracts/\",\":hardhat/=lib/automate/node_modules/hardhat/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\":prb-test/=lib/automate/lib/prb-test/src/\",\":prb/-est/=lib/automate/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts_v5.0.1/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"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":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","automate/=lib/automate/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gelato/=lib/automate/contracts/","hardhat/=lib/automate/node_modules/hardhat/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/","prb-test/=lib/automate/lib/prb-test/src/","prb/-est/=lib/automate/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol":"SafeERC20"},"evmVersion":"shanghai","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts_v5.0.1/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user"},"devdoc":{"version":1,"kind":"dev","details":"Wrappers around ERC20 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 ERC20 token failed."}]},"title":"SafeERC20"},"ast":{"absolutePath":"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol","id":48446,"exportedSymbols":{"Address":[48698],"IERC20":[48119],"IERC20Permit":[48155],"SafeERC20":[48445]},"nodeType":"SourceUnit","src":"115:5655:37","nodes":[{"id":48157,"nodeType":"PragmaDirective","src":"115:24:37","nodes":[],"literals":["solidity","^","0.8",".20"]},{"id":48159,"nodeType":"ImportDirective","src":"141:37:37","nodes":[],"absolutePath":"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","nameLocation":"-1:-1:-1","scope":48446,"sourceUnit":48120,"symbolAliases":[{"foreign":{"id":48158,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48119,"src":"149:6:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":48161,"nodeType":"ImportDirective","src":"179:60:37","nodes":[],"absolutePath":"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","nameLocation":"-1:-1:-1","scope":48446,"sourceUnit":48156,"symbolAliases":[{"foreign":{"id":48160,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48155,"src":"187:12:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":48163,"nodeType":"ImportDirective","src":"240:51:37","nodes":[],"absolutePath":"lib/openzeppelin-contracts_v5.0.1/contracts/utils/Address.sol","file":"../../../utils/Address.sol","nameLocation":"-1:-1:-1","scope":48446,"sourceUnit":48699,"symbolAliases":[{"foreign":{"id":48162,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48698,"src":"248:7:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":48445,"nodeType":"ContractDefinition","src":"751:5018:37","nodes":[{"id":48167,"nodeType":"UsingForDirective","src":"775:26:37","nodes":[],"global":false,"libraryName":{"id":48165,"name":"Address","nameLocations":["781:7:37"],"nodeType":"IdentifierPath","referencedDeclaration":48698,"src":"781:7:37"},"typeName":{"id":48166,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":48172,"nodeType":"ErrorDefinition","src":"876:46:37","nodes":[],"documentation":{"id":48168,"nodeType":"StructuredDocumentation","src":"807:64:37","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","name":"SafeERC20FailedOperation","nameLocation":"882:24:37","parameters":{"id":48171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48170,"mutability":"mutable","name":"token","nameLocation":"915:5:37","nodeType":"VariableDeclaration","scope":48172,"src":"907:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48169,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:37"}},{"id":48181,"nodeType":"ErrorDefinition","src":"1004:109:37","nodes":[],"documentation":{"id":48173,"nodeType":"StructuredDocumentation","src":"928:71:37","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:37","parameters":{"id":48180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48175,"mutability":"mutable","name":"spender","nameLocation":"1051:7:37","nodeType":"VariableDeclaration","scope":48181,"src":"1043:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48174,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48177,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:37","nodeType":"VariableDeclaration","scope":48181,"src":"1060:24:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48176,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48179,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:37","nodeType":"VariableDeclaration","scope":48181,"src":"1086:25:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48178,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:37"}},{"id":48205,"nodeType":"FunctionDefinition","src":"1303:160:37","nodes":[],"body":{"id":48204,"nodeType":"Block","src":"1375:88:37","nodes":[],"statements":[{"expression":{"arguments":[{"id":48193,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48185,"src":"1405:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":48196,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48185,"src":"1427:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:37","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":48086,"src":"1427:14:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":48198,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48187,"src":"1444:2:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48199,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48189,"src":"1448:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":48200,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:37","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":48194,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48195,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48192,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48395,"src":"1385:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":48202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48203,"nodeType":"ExpressionStatement","src":"1385:71:37"}]},"documentation":{"id":48182,"nodeType":"StructuredDocumentation","src":"1119:179:37","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":"1312:12:37","parameters":{"id":48190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48185,"mutability":"mutable","name":"token","nameLocation":"1332:5:37","nodeType":"VariableDeclaration","scope":48205,"src":"1325:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48184,"nodeType":"UserDefinedTypeName","pathNode":{"id":48183,"name":"IERC20","nameLocations":["1325:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"1325:6:37"},"referencedDeclaration":48119,"src":"1325:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48187,"mutability":"mutable","name":"to","nameLocation":"1347:2:37","nodeType":"VariableDeclaration","scope":48205,"src":"1339:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48186,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48189,"mutability":"mutable","name":"value","nameLocation":"1359:5:37","nodeType":"VariableDeclaration","scope":48205,"src":"1351:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48188,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:37"},"returnParameters":{"id":48191,"nodeType":"ParameterList","parameters":[],"src":"1375:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48232,"nodeType":"FunctionDefinition","src":"1702:188:37","nodes":[],"body":{"id":48231,"nodeType":"Block","src":"1792:98:37","nodes":[],"statements":[{"expression":{"arguments":[{"id":48219,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48209,"src":"1822:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":48222,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48209,"src":"1844:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:37","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":48118,"src":"1844:18:37","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":48224,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48211,"src":"1865:4:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48225,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48213,"src":"1871:2:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48226,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48215,"src":"1875:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":48227,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:37","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":48220,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48221,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48218,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48395,"src":"1802:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":48229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48230,"nodeType":"ExpressionStatement","src":"1802:81:37"}]},"documentation":{"id":48206,"nodeType":"StructuredDocumentation","src":"1469:228:37","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":"1711:16:37","parameters":{"id":48216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48209,"mutability":"mutable","name":"token","nameLocation":"1735:5:37","nodeType":"VariableDeclaration","scope":48232,"src":"1728:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48208,"nodeType":"UserDefinedTypeName","pathNode":{"id":48207,"name":"IERC20","nameLocations":["1728:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"1728:6:37"},"referencedDeclaration":48119,"src":"1728:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48211,"mutability":"mutable","name":"from","nameLocation":"1750:4:37","nodeType":"VariableDeclaration","scope":48232,"src":"1742:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48210,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48213,"mutability":"mutable","name":"to","nameLocation":"1764:2:37","nodeType":"VariableDeclaration","scope":48232,"src":"1756:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48212,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48215,"mutability":"mutable","name":"value","nameLocation":"1776:5:37","nodeType":"VariableDeclaration","scope":48232,"src":"1768:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48214,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:37"},"returnParameters":{"id":48217,"nodeType":"ParameterList","parameters":[],"src":"1792:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48263,"nodeType":"FunctionDefinition","src":"2081:225:37","nodes":[],"body":{"id":48262,"nodeType":"Block","src":"2167:139:37","nodes":[],"statements":[{"assignments":[48244],"declarations":[{"constant":false,"id":48244,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:37","nodeType":"VariableDeclaration","scope":48262,"src":"2177:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48253,"initialValue":{"arguments":[{"arguments":[{"id":48249,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:37","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$48445","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$48445","typeString":"library SafeERC20"}],"id":48248,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48247,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:37","typeDescriptions":{}}},"id":48250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48251,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48238,"src":"2231:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":48245,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48236,"src":"2200:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:37","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":48096,"src":"2200:15:37","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":48252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:37"},{"expression":{"arguments":[{"id":48255,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48236,"src":"2262:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"id":48256,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48238,"src":"2269:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48257,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48244,"src":"2278:12:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":48258,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48240,"src":"2293:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":48254,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48353,"src":"2249:12:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":48260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48261,"nodeType":"ExpressionStatement","src":"2249:50:37"}]},"documentation":{"id":48233,"nodeType":"StructuredDocumentation","src":"1896:180:37","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:37","parameters":{"id":48241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48236,"mutability":"mutable","name":"token","nameLocation":"2119:5:37","nodeType":"VariableDeclaration","scope":48263,"src":"2112:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48235,"nodeType":"UserDefinedTypeName","pathNode":{"id":48234,"name":"IERC20","nameLocations":["2112:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"2112:6:37"},"referencedDeclaration":48119,"src":"2112:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48238,"mutability":"mutable","name":"spender","nameLocation":"2134:7:37","nodeType":"VariableDeclaration","scope":48263,"src":"2126:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48237,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48240,"mutability":"mutable","name":"value","nameLocation":"2151:5:37","nodeType":"VariableDeclaration","scope":48263,"src":"2143:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48239,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:37"},"returnParameters":{"id":48242,"nodeType":"ParameterList","parameters":[],"src":"2167:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48306,"nodeType":"FunctionDefinition","src":"2509:468:37","nodes":[],"body":{"id":48305,"nodeType":"Block","src":"2607:370:37","nodes":[],"statements":[{"id":48304,"nodeType":"UncheckedBlock","src":"2617:354:37","statements":[{"assignments":[48275],"declarations":[{"constant":false,"id":48275,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:37","nodeType":"VariableDeclaration","scope":48304,"src":"2641:24:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48274,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48284,"initialValue":{"arguments":[{"arguments":[{"id":48280,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:37","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$48445","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$48445","typeString":"library SafeERC20"}],"id":48279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48278,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:37","typeDescriptions":{}}},"id":48281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48282,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48269,"src":"2699:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":48276,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48267,"src":"2668:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:37","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":48096,"src":"2668:15:37","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":48283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:37"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48285,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48275,"src":"2725:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":48286,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48271,"src":"2744:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48295,"nodeType":"IfStatement","src":"2721:160:37","trueBody":{"id":48294,"nodeType":"Block","src":"2763:118:37","statements":[{"errorCall":{"arguments":[{"id":48289,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48269,"src":"2821:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48290,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48275,"src":"2830:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48291,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48271,"src":"2848:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":48288,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48181,"src":"2788:32:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) pure"}},"id":48292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48293,"nodeType":"RevertStatement","src":"2781:85:37"}]}},{"expression":{"arguments":[{"id":48297,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48267,"src":"2907:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"id":48298,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48269,"src":"2914:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48299,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48275,"src":"2923:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":48300,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48271,"src":"2942:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":48296,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48353,"src":"2894:12:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":48302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48303,"nodeType":"ExpressionStatement","src":"2894:66:37"}]}]},"documentation":{"id":48264,"nodeType":"StructuredDocumentation","src":"2312:192:37","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:37","parameters":{"id":48272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48267,"mutability":"mutable","name":"token","nameLocation":"2547:5:37","nodeType":"VariableDeclaration","scope":48306,"src":"2540:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48266,"nodeType":"UserDefinedTypeName","pathNode":{"id":48265,"name":"IERC20","nameLocations":["2540:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"2540:6:37"},"referencedDeclaration":48119,"src":"2540:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48269,"mutability":"mutable","name":"spender","nameLocation":"2562:7:37","nodeType":"VariableDeclaration","scope":48306,"src":"2554:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48268,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48271,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:37","nodeType":"VariableDeclaration","scope":48306,"src":"2571:25:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48270,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:37"},"returnParameters":{"id":48273,"nodeType":"ParameterList","parameters":[],"src":"2607:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48353,"nodeType":"FunctionDefinition","src":"3296:380:37","nodes":[],"body":{"id":48352,"nodeType":"Block","src":"3373:303:37","nodes":[],"statements":[{"assignments":[48318],"declarations":[{"constant":false,"id":48318,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:37","nodeType":"VariableDeclaration","scope":48352,"src":"3383:25:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":48317,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":48327,"initialValue":{"arguments":[{"expression":{"id":48321,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48310,"src":"3426:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:37","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":48106,"src":"3426:13:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":48323,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48312,"src":"3442:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48324,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48314,"src":"3451:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":48325,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:37","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":48319,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48320,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:37"},{"condition":{"id":48332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:37","subExpression":{"arguments":[{"id":48329,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48310,"src":"3498:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"id":48330,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48318,"src":"3505:12:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48328,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48444,"src":"3474:23:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":48331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48351,"nodeType":"IfStatement","src":"3469:201:37","trueBody":{"id":48350,"nodeType":"Block","src":"3520:150:37","statements":[{"expression":{"arguments":[{"id":48334,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48310,"src":"35