{
    "Function": "permit",
    "File": "contracts/test/OtherStrategyToken.sol",
    "Parent Contracts": [
        "contracts/test/OtherStrategyTokenStorage.sol",
        "contracts/helpers/StrategyTypes.sol",
        "contracts/interfaces/IStrategyToken.sol",
        "contracts/interfaces/IERC20NonStandard.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [
        "ecrecover(bytes32,uint8,bytes32,bytes32)",
        "keccak256(bytes)",
        "require(bool,string)",
        "require(bool,string)",
        "abi.encodePacked()",
        "_approve",
        "abi.encode()",
        "keccak256(bytes)"
    ],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "function permit(\n        address owner,\n        address spender,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) public override {\n        require(block.timestamp <= deadline, \"Expired deadline\");\n\n        bytes32 digest =\n            keccak256(\n                abi.encodePacked(\n                    \"\\x19\\x01\",\n                    DOMAIN_SEPARATOR,\n                    keccak256(\n                        abi.encode(\n                            PERMIT_TYPEHASH,\n                            owner,\n                            spender,\n                            value,\n                            _nonces[owner],\n                            deadline\n                        )\n                    )\n                )\n            );\n\n        address signer = ecrecover(digest, v, r, s);\n        require(signer != address(0) && signer == owner, \"Invalid signature\");\n\n        _nonces[owner]++;\n        _approve(owner, spender, value);\n    }"
}