{
    "Function": "_callOptionalReturn",
    "File": "contracts/openzeppelin-solidity/contracts/token/ERC20/utils/SafeERC20.sol",
    "Parent Contracts": [],
    "High-Level Calls": [
        "Address"
    ],
    "Internal Calls": [
        "abi.decode()",
        "require(bool,string)"
    ],
    "Library Calls": [
        "functionCall"
    ],
    "Low-Level Calls": [],
    "Code": "function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n        // the target address contains contract code and also asserts for success in the low-level call.\n\n        bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n        if (returndata.length > 0) {\n            // Return data is optional\n            require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n        }\n    }"
}