{
    "contractName": "ERC165Checker",
    "abi": [],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":\"ERC165Checker\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
    "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220309e8ddb964eddb1379de5111b19799e2459932548f7d7050a7d59f7dc0d18a564736f6c63430008070033",
    "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220309e8ddb964eddb1379de5111b19799e2459932548f7d7050a7d59f7dc0d18a564736f6c63430008070033",
    "immutableReferences": {},
    "sourceMap": "449:4414:59:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;449:4414:59;;;;;;;;;;;;;;;;;",
    "deployedSourceMap": "449:4414:59:-:0;;;;;;;;",
    "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.2) (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n    // As per the EIP-165 spec, no interface should ever match 0xffffffff\n    bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n    /**\n     * @dev Returns true if `account` supports the {IERC165} interface,\n     */\n    function supportsERC165(address account) internal view returns (bool) {\n        // Any contract that implements ERC165 must explicitly indicate support of\n        // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n        return\n            _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n            !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n    }\n\n    /**\n     * @dev Returns true if `account` supports the interface defined by\n     * `interfaceId`. Support for {IERC165} itself is queried automatically.\n     *\n     * See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n        // query support of both ERC165 as per the spec and support of _interfaceId\n        return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n    }\n\n    /**\n     * @dev Returns a boolean array where each value corresponds to the\n     * interfaces passed in and whether they're supported or not. This allows\n     * you to batch check interfaces for a contract where your expectation\n     * is that some interfaces may not be supported.\n     *\n     * See {IERC165-supportsInterface}.\n     *\n     * _Available since v3.4._\n     */\n    function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n        internal\n        view\n        returns (bool[] memory)\n    {\n        // an array of booleans corresponding to interfaceIds and whether they're supported or not\n        bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n        // query support of ERC165 itself\n        if (supportsERC165(account)) {\n            // query support of each interface in interfaceIds\n            for (uint256 i = 0; i < interfaceIds.length; i++) {\n                interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n            }\n        }\n\n        return interfaceIdsSupported;\n    }\n\n    /**\n     * @dev Returns true if `account` supports all the interfaces defined in\n     * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n     *\n     * Batch-querying can lead to gas savings by skipping repeated checks for\n     * {IERC165} support.\n     *\n     * See {IERC165-supportsInterface}.\n     */\n    function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n        // query support of ERC165 itself\n        if (!supportsERC165(account)) {\n            return false;\n        }\n\n        // query support of each interface in _interfaceIds\n        for (uint256 i = 0; i < interfaceIds.length; i++) {\n            if (!_supportsERC165Interface(account, interfaceIds[i])) {\n                return false;\n            }\n        }\n\n        // all interfaces supported\n        return true;\n    }\n\n    /**\n     * @notice Query if a contract implements an interface, does not check ERC165 support\n     * @param account The address of the contract to query for support of an interface\n     * @param interfaceId The interface identifier, as specified in ERC-165\n     * @return true if the contract at account indicates support of the interface with\n     * identifier interfaceId, false otherwise\n     * @dev Assumes that account contains a contract that supports ERC165, otherwise\n     * the behavior of this method is undefined. This precondition can be checked\n     * with {supportsERC165}.\n     * Interface identification is specified in ERC-165.\n     */\n    function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n        // prepare call\n        bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n\n        // perform static call\n        bool success;\n        uint256 returnSize;\n        uint256 returnValue;\n        assembly {\n            success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20)\n            returnSize := returndatasize()\n            returnValue := mload(0x00)\n        }\n\n        return success && returnSize >= 0x20 && returnValue > 0;\n    }\n}\n",
    "sourcePath": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
    "ast": {
        "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
        "exportedSymbols": {
            "ERC165Checker": [
                12340
            ],
            "IERC165": [
                12352
            ]
        },
        "id": 12341,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 12148,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "121:23:59"
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
                "file": "./IERC165.sol",
                "id": 12149,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 12341,
                "sourceUnit": 12353,
                "src": "146:23:59",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "documentation": {
                    "id": 12150,
                    "nodeType": "StructuredDocumentation",
                    "src": "171:277:59",
                    "text": " @dev Library used to query support of an interface declared via {IERC165}.\n Note that these functions return the actual result of the query: they do not\n `revert` if an interface is not supported. It is up to the caller to decide\n what to do in these cases."
                },
                "fullyImplemented": true,
                "id": 12340,
                "linearizedBaseContracts": [
                    12340
                ],
                "name": "ERC165Checker",
                "nameLocation": "457:13:59",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "constant": true,
                        "id": 12153,
                        "mutability": "constant",
                        "name": "_INTERFACE_ID_INVALID",
                        "nameLocation": "575:21:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 12340,
                        "src": "551:58:59",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                        },
                        "typeName": {
                            "id": 12151,
                            "name": "bytes4",
                            "nodeType": "ElementaryTypeName",
                            "src": "551:6:59",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                            }
                        },
                        "value": {
                            "hexValue": "30786666666666666666",
                            "id": 12152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "599:10:59",
                            "typeDescriptions": {
                                "typeIdentifier": "t_rational_4294967295_by_1",
                                "typeString": "int_const 4294967295"
                            },
                            "value": "0xffffffff"
                        },
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 12175,
                            "nodeType": "Block",
                            "src": "774:341:59",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 12173,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [
                                                {
                                                    "id": 12162,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12156,
                                                    "src": "1000:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 12164,
                                                                "name": "IERC165",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 12352,
                                                                "src": "1014:7:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$12352_$",
                                                                    "typeString": "type(contract IERC165)"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$12352_$",
                                                                    "typeString": "type(contract IERC165)"
                                                                }
                                                            ],
                                                            "id": 12163,
                                                            "name": "type",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967269,
                                                            "src": "1009:4:59",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                "typeString": "function () pure"
                                                            }
                                                        },
                                                        "id": 12165,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "1009:13:59",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$12352",
                                                            "typeString": "type(contract IERC165)"
                                                        }
                                                    },
                                                    "id": 12166,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "interfaceId",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1009:25:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "id": 12161,
                                                "name": "_supportsERC165Interface",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12339,
                                                "src": "975:24:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (address,bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 12167,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "975:60:59",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "id": 12172,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "!",
                                            "prefix": true,
                                            "src": "1051:57:59",
                                            "subExpression": {
                                                "arguments": [
                                                    {
                                                        "id": 12169,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12156,
                                                        "src": "1077:7:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 12170,
                                                        "name": "_INTERFACE_ID_INVALID",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12153,
                                                        "src": "1086:21:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    ],
                                                    "id": 12168,
                                                    "name": "_supportsERC165Interface",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12339,
                                                    "src": "1052:24:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                        "typeString": "function (address,bytes4) view returns (bool)"
                                                    }
                                                },
                                                "id": 12171,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1052:56:59",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "975:133:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 12160,
                                    "id": 12174,
                                    "nodeType": "Return",
                                    "src": "956:152:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12154,
                            "nodeType": "StructuredDocumentation",
                            "src": "616:83:59",
                            "text": " @dev Returns true if `account` supports the {IERC165} interface,"
                        },
                        "id": 12176,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsERC165",
                        "nameLocation": "713:14:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12157,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12156,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "736:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12176,
                                    "src": "728:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12155,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "728:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "727:17:59"
                        },
                        "returnParameters": {
                            "id": 12160,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12159,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12176,
                                    "src": "768:4:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 12158,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "768:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "767:6:59"
                        },
                        "scope": 12340,
                        "src": "704:411:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12195,
                            "nodeType": "Block",
                            "src": "1426:181:59",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 12193,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [
                                                {
                                                    "id": 12187,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12179,
                                                    "src": "1542:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                ],
                                                "id": 12186,
                                                "name": "supportsERC165",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12176,
                                                "src": "1527:14:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                    "typeString": "function (address) view returns (bool)"
                                                }
                                            },
                                            "id": 12188,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1527:23:59",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "id": 12190,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12179,
                                                    "src": "1579:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                {
                                                    "id": 12191,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12181,
                                                    "src": "1588:11:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "id": 12189,
                                                "name": "_supportsERC165Interface",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12339,
                                                "src": "1554:24:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (address,bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 12192,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1554:46:59",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1527:73:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 12185,
                                    "id": 12194,
                                    "nodeType": "Return",
                                    "src": "1520:80:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12177,
                            "nodeType": "StructuredDocumentation",
                            "src": "1121:207:59",
                            "text": " @dev Returns true if `account` supports the interface defined by\n `interfaceId`. Support for {IERC165} itself is queried automatically.\n See {IERC165-supportsInterface}."
                        },
                        "id": 12196,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsInterface",
                        "nameLocation": "1342:17:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12182,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12179,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "1368:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12196,
                                    "src": "1360:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12178,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1360:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12181,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "1384:11:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12196,
                                    "src": "1377:18:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 12180,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1377:6:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1359:37:59"
                        },
                        "returnParameters": {
                            "id": 12185,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12184,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12196,
                                    "src": "1420:4:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 12183,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1420:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1419:6:59"
                        },
                        "scope": 12340,
                        "src": "1333:274:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12251,
                            "nodeType": "Block",
                            "src": "2137:552:59",
                            "statements": [
                                {
                                    "assignments": [
                                        12212
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12212,
                                            "mutability": "mutable",
                                            "name": "interfaceIdsSupported",
                                            "nameLocation": "2260:21:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12251,
                                            "src": "2246:35:59",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                                "typeString": "bool[]"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 12210,
                                                    "name": "bool",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2246:4:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 12211,
                                                "nodeType": "ArrayTypeName",
                                                "src": "2246:6:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                                                    "typeString": "bool[]"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12219,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 12216,
                                                    "name": "interfaceIds",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12202,
                                                    "src": "2295:12:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                        "typeString": "bytes4[] memory"
                                                    }
                                                },
                                                "id": 12217,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "length",
                                                "nodeType": "MemberAccess",
                                                "src": "2295:19:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 12215,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "NewExpression",
                                            "src": "2284:10:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bool_$dyn_memory_ptr_$",
                                                "typeString": "function (uint256) pure returns (bool[] memory)"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 12213,
                                                    "name": "bool",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2288:4:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 12214,
                                                "nodeType": "ArrayTypeName",
                                                "src": "2288:6:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                                                    "typeString": "bool[]"
                                                }
                                            }
                                        },
                                        "id": 12218,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2284:31:59",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                            "typeString": "bool[] memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2246:69:59"
                                },
                                {
                                    "condition": {
                                        "arguments": [
                                            {
                                                "id": 12221,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12199,
                                                "src": "2387:7:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 12220,
                                            "name": "supportsERC165",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12176,
                                            "src": "2372:14:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                "typeString": "function (address) view returns (bool)"
                                            }
                                        },
                                        "id": 12222,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2372:23:59",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 12248,
                                    "nodeType": "IfStatement",
                                    "src": "2368:276:59",
                                    "trueBody": {
                                        "id": 12247,
                                        "nodeType": "Block",
                                        "src": "2397:247:59",
                                        "statements": [
                                            {
                                                "body": {
                                                    "id": 12245,
                                                    "nodeType": "Block",
                                                    "src": "2524:110:59",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "id": 12243,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftHandSide": {
                                                                    "baseExpression": {
                                                                        "id": 12234,
                                                                        "name": "interfaceIdsSupported",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 12212,
                                                                        "src": "2542:21:59",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                                                            "typeString": "bool[] memory"
                                                                        }
                                                                    },
                                                                    "id": 12236,
                                                                    "indexExpression": {
                                                                        "id": 12235,
                                                                        "name": "i",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 12224,
                                                                        "src": "2564:1:59",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": true,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "2542:24:59",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    }
                                                                },
                                                                "nodeType": "Assignment",
                                                                "operator": "=",
                                                                "rightHandSide": {
                                                                    "arguments": [
                                                                        {
                                                                            "id": 12238,
                                                                            "name": "account",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 12199,
                                                                            "src": "2594:7:59",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_address",
                                                                                "typeString": "address"
                                                                            }
                                                                        },
                                                                        {
                                                                            "baseExpression": {
                                                                                "id": 12239,
                                                                                "name": "interfaceIds",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 12202,
                                                                                "src": "2603:12:59",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                                                    "typeString": "bytes4[] memory"
                                                                                }
                                                                            },
                                                                            "id": 12241,
                                                                            "indexExpression": {
                                                                                "id": 12240,
                                                                                "name": "i",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 12224,
                                                                                "src": "2616:1:59",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "nodeType": "IndexAccess",
                                                                            "src": "2603:15:59",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bytes4",
                                                                                "typeString": "bytes4"
                                                                            }
                                                                        }
                                                                    ],
                                                                    "expression": {
                                                                        "argumentTypes": [
                                                                            {
                                                                                "typeIdentifier": "t_address",
                                                                                "typeString": "address"
                                                                            },
                                                                            {
                                                                                "typeIdentifier": "t_bytes4",
                                                                                "typeString": "bytes4"
                                                                            }
                                                                        ],
                                                                        "id": 12237,
                                                                        "name": "_supportsERC165Interface",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 12339,
                                                                        "src": "2569:24:59",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                                            "typeString": "function (address,bytes4) view returns (bool)"
                                                                        }
                                                                    },
                                                                    "id": 12242,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "kind": "functionCall",
                                                                    "lValueRequested": false,
                                                                    "names": [],
                                                                    "nodeType": "FunctionCall",
                                                                    "src": "2569:50:59",
                                                                    "tryCall": false,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    }
                                                                },
                                                                "src": "2542:77:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "id": 12244,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "2542:77:59"
                                                        }
                                                    ]
                                                },
                                                "condition": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 12230,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 12227,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12224,
                                                        "src": "2494:1:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "<",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 12228,
                                                            "name": "interfaceIds",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 12202,
                                                            "src": "2498:12:59",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                                "typeString": "bytes4[] memory"
                                                            }
                                                        },
                                                        "id": 12229,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "length",
                                                        "nodeType": "MemberAccess",
                                                        "src": "2498:19:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "2494:23:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 12246,
                                                "initializationExpression": {
                                                    "assignments": [
                                                        12224
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 12224,
                                                            "mutability": "mutable",
                                                            "name": "i",
                                                            "nameLocation": "2487:1:59",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 12246,
                                                            "src": "2479:9:59",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "typeName": {
                                                                "id": 12223,
                                                                "name": "uint256",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "2479:7:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 12226,
                                                    "initialValue": {
                                                        "hexValue": "30",
                                                        "id": 12225,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2491:1:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "2479:13:59"
                                                },
                                                "loopExpression": {
                                                    "expression": {
                                                        "id": 12232,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "UnaryOperation",
                                                        "operator": "++",
                                                        "prefix": false,
                                                        "src": "2519:3:59",
                                                        "subExpression": {
                                                            "id": 12231,
                                                            "name": "i",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 12224,
                                                            "src": "2519:1:59",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 12233,
                                                    "nodeType": "ExpressionStatement",
                                                    "src": "2519:3:59"
                                                },
                                                "nodeType": "ForStatement",
                                                "src": "2474:160:59"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "id": 12249,
                                        "name": "interfaceIdsSupported",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12212,
                                        "src": "2661:21:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                            "typeString": "bool[] memory"
                                        }
                                    },
                                    "functionReturnParameters": 12207,
                                    "id": 12250,
                                    "nodeType": "Return",
                                    "src": "2654:28:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12197,
                            "nodeType": "StructuredDocumentation",
                            "src": "1613:374:59",
                            "text": " @dev Returns a boolean array where each value corresponds to the\n interfaces passed in and whether they're supported or not. This allows\n you to batch check interfaces for a contract where your expectation\n is that some interfaces may not be supported.\n See {IERC165-supportsInterface}.\n _Available since v3.4._"
                        },
                        "id": 12252,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getSupportedInterfaces",
                        "nameLocation": "2001:22:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12203,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12199,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "2032:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12252,
                                    "src": "2024:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12198,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2024:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12202,
                                    "mutability": "mutable",
                                    "name": "interfaceIds",
                                    "nameLocation": "2057:12:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12252,
                                    "src": "2041:28:59",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                        "typeString": "bytes4[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 12200,
                                            "name": "bytes4",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2041:6:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "id": 12201,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2041:8:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
                                            "typeString": "bytes4[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2023:47:59"
                        },
                        "returnParameters": {
                            "id": 12207,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12206,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12252,
                                    "src": "2118:13:59",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                        "typeString": "bool[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 12204,
                                            "name": "bool",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2118:4:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "id": 12205,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2118:6:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                                            "typeString": "bool[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2117:15:59"
                        },
                        "scope": 12340,
                        "src": "1992:697:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12297,
                            "nodeType": "Block",
                            "src": "3131:429:59",
                            "statements": [
                                {
                                    "condition": {
                                        "id": 12266,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "!",
                                        "prefix": true,
                                        "src": "3187:24:59",
                                        "subExpression": {
                                            "arguments": [
                                                {
                                                    "id": 12264,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12255,
                                                    "src": "3203:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                ],
                                                "id": 12263,
                                                "name": "supportsERC165",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12176,
                                                "src": "3188:14:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                    "typeString": "function (address) view returns (bool)"
                                                }
                                            },
                                            "id": 12265,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3188:23:59",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 12270,
                                    "nodeType": "IfStatement",
                                    "src": "3183:67:59",
                                    "trueBody": {
                                        "id": 12269,
                                        "nodeType": "Block",
                                        "src": "3213:37:59",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "hexValue": "66616c7365",
                                                    "id": 12267,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "bool",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "3234:5:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "value": "false"
                                                },
                                                "functionReturnParameters": 12262,
                                                "id": 12268,
                                                "nodeType": "Return",
                                                "src": "3227:12:59"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "body": {
                                        "id": 12293,
                                        "nodeType": "Block",
                                        "src": "3370:126:59",
                                        "statements": [
                                            {
                                                "condition": {
                                                    "id": 12288,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "!",
                                                    "prefix": true,
                                                    "src": "3388:51:59",
                                                    "subExpression": {
                                                        "arguments": [
                                                            {
                                                                "id": 12283,
                                                                "name": "account",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 12255,
                                                                "src": "3414:7:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "baseExpression": {
                                                                    "id": 12284,
                                                                    "name": "interfaceIds",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 12258,
                                                                    "src": "3423:12:59",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                                        "typeString": "bytes4[] memory"
                                                                    }
                                                                },
                                                                "id": 12286,
                                                                "indexExpression": {
                                                                    "id": 12285,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 12272,
                                                                    "src": "3436:1:59",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "3423:15:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                }
                                                            ],
                                                            "id": 12282,
                                                            "name": "_supportsERC165Interface",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 12339,
                                                            "src": "3389:24:59",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                                "typeString": "function (address,bytes4) view returns (bool)"
                                                            }
                                                        },
                                                        "id": 12287,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3389:50:59",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 12292,
                                                "nodeType": "IfStatement",
                                                "src": "3384:102:59",
                                                "trueBody": {
                                                    "id": 12291,
                                                    "nodeType": "Block",
                                                    "src": "3441:45:59",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "hexValue": "66616c7365",
                                                                "id": 12289,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "bool",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "3466:5:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                "value": "false"
                                                            },
                                                            "functionReturnParameters": 12262,
                                                            "id": 12290,
                                                            "nodeType": "Return",
                                                            "src": "3459:12:59"
                                                        }
                                                    ]
                                                }
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 12278,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 12275,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12272,
                                            "src": "3340:1:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 12276,
                                                "name": "interfaceIds",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12258,
                                                "src": "3344:12:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                    "typeString": "bytes4[] memory"
                                                }
                                            },
                                            "id": 12277,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "3344:19:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3340:23:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 12294,
                                    "initializationExpression": {
                                        "assignments": [
                                            12272
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 12272,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "3333:1:59",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 12294,
                                                "src": "3325:9:59",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 12271,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3325:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 12274,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 12273,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3337:1:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "3325:13:59"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 12280,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "3365:3:59",
                                            "subExpression": {
                                                "id": 12279,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12272,
                                                "src": "3365:1:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 12281,
                                        "nodeType": "ExpressionStatement",
                                        "src": "3365:3:59"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "3320:176:59"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 12295,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3549:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 12262,
                                    "id": 12296,
                                    "nodeType": "Return",
                                    "src": "3542:11:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12253,
                            "nodeType": "StructuredDocumentation",
                            "src": "2695:324:59",
                            "text": " @dev Returns true if `account` supports all the interfaces defined in\n `interfaceIds`. Support for {IERC165} itself is queried automatically.\n Batch-querying can lead to gas savings by skipping repeated checks for\n {IERC165} support.\n See {IERC165-supportsInterface}."
                        },
                        "id": 12298,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsAllInterfaces",
                        "nameLocation": "3033:21:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12259,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12255,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "3063:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12298,
                                    "src": "3055:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12254,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3055:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12258,
                                    "mutability": "mutable",
                                    "name": "interfaceIds",
                                    "nameLocation": "3088:12:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12298,
                                    "src": "3072:28:59",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                        "typeString": "bytes4[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 12256,
                                            "name": "bytes4",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "3072:6:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "id": 12257,
                                        "nodeType": "ArrayTypeName",
                                        "src": "3072:8:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
                                            "typeString": "bytes4[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3054:47:59"
                        },
                        "returnParameters": {
                            "id": 12262,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12261,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12298,
                                    "src": "3125:4:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 12260,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3125:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3124:6:59"
                        },
                        "scope": 12340,
                        "src": "3024:536:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12338,
                            "nodeType": "Block",
                            "src": "4322:539:59",
                            "statements": [
                                {
                                    "assignments": [
                                        12309
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12309,
                                            "mutability": "mutable",
                                            "name": "encodedParams",
                                            "nameLocation": "4369:13:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12338,
                                            "src": "4356:26:59",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 12308,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4356:5:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12317,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 12312,
                                                        "name": "IERC165",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12352,
                                                        "src": "4408:7:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_IERC165_$12352_$",
                                                            "typeString": "type(contract IERC165)"
                                                        }
                                                    },
                                                    "id": 12313,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "supportsInterface",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 12351,
                                                    "src": "4408:25:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_declaration_view$_t_bytes4_$returns$_t_bool_$",
                                                        "typeString": "function IERC165.supportsInterface(bytes4) view returns (bool)"
                                                    }
                                                },
                                                "id": 12314,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "selector",
                                                "nodeType": "MemberAccess",
                                                "src": "4408:34:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            {
                                                "id": 12315,
                                                "name": "interfaceId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12303,
                                                "src": "4444:11:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            ],
                                            "expression": {
                                                "id": 12310,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "4385:3:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 12311,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodeWithSelector",
                                            "nodeType": "MemberAccess",
                                            "src": "4385:22:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bytes4) pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 12316,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4385:71:59",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4356:100:59"
                                },
                                {
                                    "assignments": [
                                        12319
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12319,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nameLocation": "4503:7:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12338,
                                            "src": "4498:12:59",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 12318,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4498:4:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12320,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4498:12:59"
                                },
                                {
                                    "assignments": [
                                        12322
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12322,
                                            "mutability": "mutable",
                                            "name": "returnSize",
                                            "nameLocation": "4528:10:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12338,
                                            "src": "4520:18:59",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 12321,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4520:7:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12323,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4520:18:59"
                                },
                                {
                                    "assignments": [
                                        12325
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12325,
                                            "mutability": "mutable",
                                            "name": "returnValue",
                                            "nameLocation": "4556:11:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12338,
                                            "src": "4548:19:59",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 12324,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4548:7:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12326,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4548:19:59"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "4586:203:59",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "4600:97:59",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "4622:5:59",
                                                            "type": "",
                                                            "value": "30000"
                                                        },
                                                        {
                                                            "name": "account",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4629:7:59"
                                                        },
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "encodedParams",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "4642:13:59"
                                                                },
                                                                {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "4657:4:59",
                                                                    "type": "",
                                                                    "value": "0x20"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4638:3:59"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "4638:24:59"
                                                        },
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "encodedParams",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "4670:13:59"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "mload",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4664:5:59"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "4664:20:59"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "4686:4:59",
                                                            "type": "",
                                                            "value": "0x00"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "4692:4:59",
                                                            "type": "",
                                                            "value": "0x20"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "staticcall",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4611:10:59"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4611:86:59"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "success",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4600:7:59"
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "4710:30:59",
                                                "value": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "returndatasize",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4724:14:59"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4724:16:59"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "returnSize",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4710:10:59"
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "4753:26:59",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "4774:4:59",
                                                            "type": "",
                                                            "value": "0x00"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4768:5:59"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4768:11:59"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "returnValue",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4753:11:59"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 12301,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4629:7:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12309,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4642:13:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12309,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4670:13:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12322,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4710:10:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12325,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4753:11:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12319,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4600:7:59",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 12327,
                                    "nodeType": "InlineAssembly",
                                    "src": "4577:212:59"
                                },
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 12336,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "id": 12332,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 12328,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12319,
                                                "src": "4806:7:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "&&",
                                            "rightExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 12331,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 12329,
                                                    "name": "returnSize",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12322,
                                                    "src": "4817:10:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "hexValue": "30783230",
                                                    "id": 12330,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "4831:4:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_32_by_1",
                                                        "typeString": "int_const 32"
                                                    },
                                                    "value": "0x20"
                                                },
                                                "src": "4817:18:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "src": "4806:29:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 12335,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 12333,
                                                "name": "returnValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12325,
                                                "src": "4839:11:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": ">",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 12334,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4853:1:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "4839:15:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "4806:48:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 12307,
                                    "id": 12337,
                                    "nodeType": "Return",
                                    "src": "4799:55:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12299,
                            "nodeType": "StructuredDocumentation",
                            "src": "3566:652:59",
                            "text": " @notice Query if a contract implements an interface, does not check ERC165 support\n @param account The address of the contract to query for support of an interface\n @param interfaceId The interface identifier, as specified in ERC-165\n @return true if the contract at account indicates support of the interface with\n identifier interfaceId, false otherwise\n @dev Assumes that account contains a contract that supports ERC165, otherwise\n the behavior of this method is undefined. This precondition can be checked\n with {supportsERC165}.\n Interface identification is specified in ERC-165."
                        },
                        "id": 12339,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_supportsERC165Interface",
                        "nameLocation": "4232:24:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12304,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12301,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "4265:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12339,
                                    "src": "4257:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12300,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4257:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12303,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "4281:11:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12339,
                                    "src": "4274:18:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 12302,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4274:6:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4256:37:59"
                        },
                        "returnParameters": {
                            "id": 12307,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12306,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12339,
                                    "src": "4316:4:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 12305,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4316:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4315:6:59"
                        },
                        "scope": 12340,
                        "src": "4223:638:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "private"
                    }
                ],
                "scope": 12341,
                "src": "449:4414:59",
                "usedErrors": []
            }
        ],
        "src": "121:4743:59"
    },
    "legacyAST": {
        "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
        "exportedSymbols": {
            "ERC165Checker": [
                12340
            ],
            "IERC165": [
                12352
            ]
        },
        "id": 12341,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 12148,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "121:23:59"
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
                "file": "./IERC165.sol",
                "id": 12149,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 12341,
                "sourceUnit": 12353,
                "src": "146:23:59",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "documentation": {
                    "id": 12150,
                    "nodeType": "StructuredDocumentation",
                    "src": "171:277:59",
                    "text": " @dev Library used to query support of an interface declared via {IERC165}.\n Note that these functions return the actual result of the query: they do not\n `revert` if an interface is not supported. It is up to the caller to decide\n what to do in these cases."
                },
                "fullyImplemented": true,
                "id": 12340,
                "linearizedBaseContracts": [
                    12340
                ],
                "name": "ERC165Checker",
                "nameLocation": "457:13:59",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "constant": true,
                        "id": 12153,
                        "mutability": "constant",
                        "name": "_INTERFACE_ID_INVALID",
                        "nameLocation": "575:21:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 12340,
                        "src": "551:58:59",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                        },
                        "typeName": {
                            "id": 12151,
                            "name": "bytes4",
                            "nodeType": "ElementaryTypeName",
                            "src": "551:6:59",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                            }
                        },
                        "value": {
                            "hexValue": "30786666666666666666",
                            "id": 12152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "599:10:59",
                            "typeDescriptions": {
                                "typeIdentifier": "t_rational_4294967295_by_1",
                                "typeString": "int_const 4294967295"
                            },
                            "value": "0xffffffff"
                        },
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 12175,
                            "nodeType": "Block",
                            "src": "774:341:59",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 12173,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [
                                                {
                                                    "id": 12162,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12156,
                                                    "src": "1000:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 12164,
                                                                "name": "IERC165",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 12352,
                                                                "src": "1014:7:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$12352_$",
                                                                    "typeString": "type(contract IERC165)"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$12352_$",
                                                                    "typeString": "type(contract IERC165)"
                                                                }
                                                            ],
                                                            "id": 12163,
                                                            "name": "type",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967269,
                                                            "src": "1009:4:59",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                "typeString": "function () pure"
                                                            }
                                                        },
                                                        "id": 12165,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "1009:13:59",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$12352",
                                                            "typeString": "type(contract IERC165)"
                                                        }
                                                    },
                                                    "id": 12166,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "interfaceId",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1009:25:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "id": 12161,
                                                "name": "_supportsERC165Interface",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12339,
                                                "src": "975:24:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (address,bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 12167,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "975:60:59",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "id": 12172,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "!",
                                            "prefix": true,
                                            "src": "1051:57:59",
                                            "subExpression": {
                                                "arguments": [
                                                    {
                                                        "id": 12169,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12156,
                                                        "src": "1077:7:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 12170,
                                                        "name": "_INTERFACE_ID_INVALID",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12153,
                                                        "src": "1086:21:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    ],
                                                    "id": 12168,
                                                    "name": "_supportsERC165Interface",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12339,
                                                    "src": "1052:24:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                        "typeString": "function (address,bytes4) view returns (bool)"
                                                    }
                                                },
                                                "id": 12171,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1052:56:59",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "975:133:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 12160,
                                    "id": 12174,
                                    "nodeType": "Return",
                                    "src": "956:152:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12154,
                            "nodeType": "StructuredDocumentation",
                            "src": "616:83:59",
                            "text": " @dev Returns true if `account` supports the {IERC165} interface,"
                        },
                        "id": 12176,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsERC165",
                        "nameLocation": "713:14:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12157,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12156,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "736:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12176,
                                    "src": "728:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12155,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "728:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "727:17:59"
                        },
                        "returnParameters": {
                            "id": 12160,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12159,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12176,
                                    "src": "768:4:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 12158,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "768:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "767:6:59"
                        },
                        "scope": 12340,
                        "src": "704:411:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12195,
                            "nodeType": "Block",
                            "src": "1426:181:59",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 12193,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [
                                                {
                                                    "id": 12187,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12179,
                                                    "src": "1542:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                ],
                                                "id": 12186,
                                                "name": "supportsERC165",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12176,
                                                "src": "1527:14:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                    "typeString": "function (address) view returns (bool)"
                                                }
                                            },
                                            "id": 12188,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1527:23:59",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "id": 12190,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12179,
                                                    "src": "1579:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                {
                                                    "id": 12191,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12181,
                                                    "src": "1588:11:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "id": 12189,
                                                "name": "_supportsERC165Interface",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12339,
                                                "src": "1554:24:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (address,bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 12192,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1554:46:59",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1527:73:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 12185,
                                    "id": 12194,
                                    "nodeType": "Return",
                                    "src": "1520:80:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12177,
                            "nodeType": "StructuredDocumentation",
                            "src": "1121:207:59",
                            "text": " @dev Returns true if `account` supports the interface defined by\n `interfaceId`. Support for {IERC165} itself is queried automatically.\n See {IERC165-supportsInterface}."
                        },
                        "id": 12196,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsInterface",
                        "nameLocation": "1342:17:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12182,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12179,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "1368:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12196,
                                    "src": "1360:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12178,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1360:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12181,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "1384:11:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12196,
                                    "src": "1377:18:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 12180,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1377:6:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1359:37:59"
                        },
                        "returnParameters": {
                            "id": 12185,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12184,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12196,
                                    "src": "1420:4:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 12183,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1420:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1419:6:59"
                        },
                        "scope": 12340,
                        "src": "1333:274:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12251,
                            "nodeType": "Block",
                            "src": "2137:552:59",
                            "statements": [
                                {
                                    "assignments": [
                                        12212
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12212,
                                            "mutability": "mutable",
                                            "name": "interfaceIdsSupported",
                                            "nameLocation": "2260:21:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12251,
                                            "src": "2246:35:59",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                                "typeString": "bool[]"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 12210,
                                                    "name": "bool",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2246:4:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 12211,
                                                "nodeType": "ArrayTypeName",
                                                "src": "2246:6:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                                                    "typeString": "bool[]"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12219,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 12216,
                                                    "name": "interfaceIds",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12202,
                                                    "src": "2295:12:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                        "typeString": "bytes4[] memory"
                                                    }
                                                },
                                                "id": 12217,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "length",
                                                "nodeType": "MemberAccess",
                                                "src": "2295:19:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 12215,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "NewExpression",
                                            "src": "2284:10:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bool_$dyn_memory_ptr_$",
                                                "typeString": "function (uint256) pure returns (bool[] memory)"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 12213,
                                                    "name": "bool",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2288:4:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 12214,
                                                "nodeType": "ArrayTypeName",
                                                "src": "2288:6:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                                                    "typeString": "bool[]"
                                                }
                                            }
                                        },
                                        "id": 12218,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2284:31:59",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                            "typeString": "bool[] memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2246:69:59"
                                },
                                {
                                    "condition": {
                                        "arguments": [
                                            {
                                                "id": 12221,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12199,
                                                "src": "2387:7:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 12220,
                                            "name": "supportsERC165",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12176,
                                            "src": "2372:14:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                "typeString": "function (address) view returns (bool)"
                                            }
                                        },
                                        "id": 12222,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2372:23:59",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 12248,
                                    "nodeType": "IfStatement",
                                    "src": "2368:276:59",
                                    "trueBody": {
                                        "id": 12247,
                                        "nodeType": "Block",
                                        "src": "2397:247:59",
                                        "statements": [
                                            {
                                                "body": {
                                                    "id": 12245,
                                                    "nodeType": "Block",
                                                    "src": "2524:110:59",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "id": 12243,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftHandSide": {
                                                                    "baseExpression": {
                                                                        "id": 12234,
                                                                        "name": "interfaceIdsSupported",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 12212,
                                                                        "src": "2542:21:59",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                                                            "typeString": "bool[] memory"
                                                                        }
                                                                    },
                                                                    "id": 12236,
                                                                    "indexExpression": {
                                                                        "id": 12235,
                                                                        "name": "i",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 12224,
                                                                        "src": "2564:1:59",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": true,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "2542:24:59",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    }
                                                                },
                                                                "nodeType": "Assignment",
                                                                "operator": "=",
                                                                "rightHandSide": {
                                                                    "arguments": [
                                                                        {
                                                                            "id": 12238,
                                                                            "name": "account",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 12199,
                                                                            "src": "2594:7:59",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_address",
                                                                                "typeString": "address"
                                                                            }
                                                                        },
                                                                        {
                                                                            "baseExpression": {
                                                                                "id": 12239,
                                                                                "name": "interfaceIds",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 12202,
                                                                                "src": "2603:12:59",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                                                    "typeString": "bytes4[] memory"
                                                                                }
                                                                            },
                                                                            "id": 12241,
                                                                            "indexExpression": {
                                                                                "id": 12240,
                                                                                "name": "i",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 12224,
                                                                                "src": "2616:1:59",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "nodeType": "IndexAccess",
                                                                            "src": "2603:15:59",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bytes4",
                                                                                "typeString": "bytes4"
                                                                            }
                                                                        }
                                                                    ],
                                                                    "expression": {
                                                                        "argumentTypes": [
                                                                            {
                                                                                "typeIdentifier": "t_address",
                                                                                "typeString": "address"
                                                                            },
                                                                            {
                                                                                "typeIdentifier": "t_bytes4",
                                                                                "typeString": "bytes4"
                                                                            }
                                                                        ],
                                                                        "id": 12237,
                                                                        "name": "_supportsERC165Interface",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 12339,
                                                                        "src": "2569:24:59",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                                            "typeString": "function (address,bytes4) view returns (bool)"
                                                                        }
                                                                    },
                                                                    "id": 12242,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "kind": "functionCall",
                                                                    "lValueRequested": false,
                                                                    "names": [],
                                                                    "nodeType": "FunctionCall",
                                                                    "src": "2569:50:59",
                                                                    "tryCall": false,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    }
                                                                },
                                                                "src": "2542:77:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "id": 12244,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "2542:77:59"
                                                        }
                                                    ]
                                                },
                                                "condition": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 12230,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 12227,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12224,
                                                        "src": "2494:1:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "<",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 12228,
                                                            "name": "interfaceIds",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 12202,
                                                            "src": "2498:12:59",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                                "typeString": "bytes4[] memory"
                                                            }
                                                        },
                                                        "id": 12229,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "length",
                                                        "nodeType": "MemberAccess",
                                                        "src": "2498:19:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "2494:23:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 12246,
                                                "initializationExpression": {
                                                    "assignments": [
                                                        12224
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 12224,
                                                            "mutability": "mutable",
                                                            "name": "i",
                                                            "nameLocation": "2487:1:59",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 12246,
                                                            "src": "2479:9:59",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "typeName": {
                                                                "id": 12223,
                                                                "name": "uint256",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "2479:7:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 12226,
                                                    "initialValue": {
                                                        "hexValue": "30",
                                                        "id": 12225,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2491:1:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "2479:13:59"
                                                },
                                                "loopExpression": {
                                                    "expression": {
                                                        "id": 12232,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "UnaryOperation",
                                                        "operator": "++",
                                                        "prefix": false,
                                                        "src": "2519:3:59",
                                                        "subExpression": {
                                                            "id": 12231,
                                                            "name": "i",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 12224,
                                                            "src": "2519:1:59",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 12233,
                                                    "nodeType": "ExpressionStatement",
                                                    "src": "2519:3:59"
                                                },
                                                "nodeType": "ForStatement",
                                                "src": "2474:160:59"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "id": 12249,
                                        "name": "interfaceIdsSupported",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12212,
                                        "src": "2661:21:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                            "typeString": "bool[] memory"
                                        }
                                    },
                                    "functionReturnParameters": 12207,
                                    "id": 12250,
                                    "nodeType": "Return",
                                    "src": "2654:28:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12197,
                            "nodeType": "StructuredDocumentation",
                            "src": "1613:374:59",
                            "text": " @dev Returns a boolean array where each value corresponds to the\n interfaces passed in and whether they're supported or not. This allows\n you to batch check interfaces for a contract where your expectation\n is that some interfaces may not be supported.\n See {IERC165-supportsInterface}.\n _Available since v3.4._"
                        },
                        "id": 12252,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getSupportedInterfaces",
                        "nameLocation": "2001:22:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12203,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12199,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "2032:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12252,
                                    "src": "2024:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12198,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2024:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12202,
                                    "mutability": "mutable",
                                    "name": "interfaceIds",
                                    "nameLocation": "2057:12:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12252,
                                    "src": "2041:28:59",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                        "typeString": "bytes4[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 12200,
                                            "name": "bytes4",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2041:6:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "id": 12201,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2041:8:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
                                            "typeString": "bytes4[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2023:47:59"
                        },
                        "returnParameters": {
                            "id": 12207,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12206,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12252,
                                    "src": "2118:13:59",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr",
                                        "typeString": "bool[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 12204,
                                            "name": "bool",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2118:4:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "id": 12205,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2118:6:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                                            "typeString": "bool[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2117:15:59"
                        },
                        "scope": 12340,
                        "src": "1992:697:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12297,
                            "nodeType": "Block",
                            "src": "3131:429:59",
                            "statements": [
                                {
                                    "condition": {
                                        "id": 12266,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "!",
                                        "prefix": true,
                                        "src": "3187:24:59",
                                        "subExpression": {
                                            "arguments": [
                                                {
                                                    "id": 12264,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12255,
                                                    "src": "3203:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                ],
                                                "id": 12263,
                                                "name": "supportsERC165",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12176,
                                                "src": "3188:14:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                    "typeString": "function (address) view returns (bool)"
                                                }
                                            },
                                            "id": 12265,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3188:23:59",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 12270,
                                    "nodeType": "IfStatement",
                                    "src": "3183:67:59",
                                    "trueBody": {
                                        "id": 12269,
                                        "nodeType": "Block",
                                        "src": "3213:37:59",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "hexValue": "66616c7365",
                                                    "id": 12267,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "bool",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "3234:5:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "value": "false"
                                                },
                                                "functionReturnParameters": 12262,
                                                "id": 12268,
                                                "nodeType": "Return",
                                                "src": "3227:12:59"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "body": {
                                        "id": 12293,
                                        "nodeType": "Block",
                                        "src": "3370:126:59",
                                        "statements": [
                                            {
                                                "condition": {
                                                    "id": 12288,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "!",
                                                    "prefix": true,
                                                    "src": "3388:51:59",
                                                    "subExpression": {
                                                        "arguments": [
                                                            {
                                                                "id": 12283,
                                                                "name": "account",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 12255,
                                                                "src": "3414:7:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "baseExpression": {
                                                                    "id": 12284,
                                                                    "name": "interfaceIds",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 12258,
                                                                    "src": "3423:12:59",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                                        "typeString": "bytes4[] memory"
                                                                    }
                                                                },
                                                                "id": 12286,
                                                                "indexExpression": {
                                                                    "id": 12285,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 12272,
                                                                    "src": "3436:1:59",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "3423:15:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                }
                                                            ],
                                                            "id": 12282,
                                                            "name": "_supportsERC165Interface",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 12339,
                                                            "src": "3389:24:59",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                                                "typeString": "function (address,bytes4) view returns (bool)"
                                                            }
                                                        },
                                                        "id": 12287,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3389:50:59",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 12292,
                                                "nodeType": "IfStatement",
                                                "src": "3384:102:59",
                                                "trueBody": {
                                                    "id": 12291,
                                                    "nodeType": "Block",
                                                    "src": "3441:45:59",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "hexValue": "66616c7365",
                                                                "id": 12289,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "bool",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "3466:5:59",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                "value": "false"
                                                            },
                                                            "functionReturnParameters": 12262,
                                                            "id": 12290,
                                                            "nodeType": "Return",
                                                            "src": "3459:12:59"
                                                        }
                                                    ]
                                                }
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 12278,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 12275,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 12272,
                                            "src": "3340:1:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 12276,
                                                "name": "interfaceIds",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12258,
                                                "src": "3344:12:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                                    "typeString": "bytes4[] memory"
                                                }
                                            },
                                            "id": 12277,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "3344:19:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3340:23:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 12294,
                                    "initializationExpression": {
                                        "assignments": [
                                            12272
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 12272,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "3333:1:59",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 12294,
                                                "src": "3325:9:59",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 12271,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3325:7:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 12274,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 12273,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3337:1:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "3325:13:59"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 12280,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "3365:3:59",
                                            "subExpression": {
                                                "id": 12279,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12272,
                                                "src": "3365:1:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 12281,
                                        "nodeType": "ExpressionStatement",
                                        "src": "3365:3:59"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "3320:176:59"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 12295,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3549:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 12262,
                                    "id": 12296,
                                    "nodeType": "Return",
                                    "src": "3542:11:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12253,
                            "nodeType": "StructuredDocumentation",
                            "src": "2695:324:59",
                            "text": " @dev Returns true if `account` supports all the interfaces defined in\n `interfaceIds`. Support for {IERC165} itself is queried automatically.\n Batch-querying can lead to gas savings by skipping repeated checks for\n {IERC165} support.\n See {IERC165-supportsInterface}."
                        },
                        "id": 12298,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsAllInterfaces",
                        "nameLocation": "3033:21:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12259,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12255,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "3063:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12298,
                                    "src": "3055:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12254,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3055:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12258,
                                    "mutability": "mutable",
                                    "name": "interfaceIds",
                                    "nameLocation": "3088:12:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12298,
                                    "src": "3072:28:59",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
                                        "typeString": "bytes4[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 12256,
                                            "name": "bytes4",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "3072:6:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "id": 12257,
                                        "nodeType": "ArrayTypeName",
                                        "src": "3072:8:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
                                            "typeString": "bytes4[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3054:47:59"
                        },
                        "returnParameters": {
                            "id": 12262,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12261,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12298,
                                    "src": "3125:4:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 12260,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3125:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3124:6:59"
                        },
                        "scope": 12340,
                        "src": "3024:536:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12338,
                            "nodeType": "Block",
                            "src": "4322:539:59",
                            "statements": [
                                {
                                    "assignments": [
                                        12309
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12309,
                                            "mutability": "mutable",
                                            "name": "encodedParams",
                                            "nameLocation": "4369:13:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12338,
                                            "src": "4356:26:59",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 12308,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4356:5:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12317,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 12312,
                                                        "name": "IERC165",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12352,
                                                        "src": "4408:7:59",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_IERC165_$12352_$",
                                                            "typeString": "type(contract IERC165)"
                                                        }
                                                    },
                                                    "id": 12313,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "supportsInterface",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 12351,
                                                    "src": "4408:25:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_declaration_view$_t_bytes4_$returns$_t_bool_$",
                                                        "typeString": "function IERC165.supportsInterface(bytes4) view returns (bool)"
                                                    }
                                                },
                                                "id": 12314,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "selector",
                                                "nodeType": "MemberAccess",
                                                "src": "4408:34:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            {
                                                "id": 12315,
                                                "name": "interfaceId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12303,
                                                "src": "4444:11:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            ],
                                            "expression": {
                                                "id": 12310,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "4385:3:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 12311,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodeWithSelector",
                                            "nodeType": "MemberAccess",
                                            "src": "4385:22:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bytes4) pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 12316,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4385:71:59",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4356:100:59"
                                },
                                {
                                    "assignments": [
                                        12319
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12319,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nameLocation": "4503:7:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12338,
                                            "src": "4498:12:59",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 12318,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4498:4:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12320,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4498:12:59"
                                },
                                {
                                    "assignments": [
                                        12322
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12322,
                                            "mutability": "mutable",
                                            "name": "returnSize",
                                            "nameLocation": "4528:10:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12338,
                                            "src": "4520:18:59",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 12321,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4520:7:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12323,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4520:18:59"
                                },
                                {
                                    "assignments": [
                                        12325
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12325,
                                            "mutability": "mutable",
                                            "name": "returnValue",
                                            "nameLocation": "4556:11:59",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12338,
                                            "src": "4548:19:59",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 12324,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4548:7:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12326,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4548:19:59"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "4586:203:59",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "4600:97:59",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "4622:5:59",
                                                            "type": "",
                                                            "value": "30000"
                                                        },
                                                        {
                                                            "name": "account",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4629:7:59"
                                                        },
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "encodedParams",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "4642:13:59"
                                                                },
                                                                {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "4657:4:59",
                                                                    "type": "",
                                                                    "value": "0x20"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4638:3:59"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "4638:24:59"
                                                        },
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "encodedParams",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "4670:13:59"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "mload",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4664:5:59"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "4664:20:59"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "4686:4:59",
                                                            "type": "",
                                                            "value": "0x00"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "4692:4:59",
                                                            "type": "",
                                                            "value": "0x20"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "staticcall",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4611:10:59"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4611:86:59"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "success",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4600:7:59"
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "4710:30:59",
                                                "value": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "returndatasize",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4724:14:59"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4724:16:59"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "returnSize",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4710:10:59"
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "4753:26:59",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "4774:4:59",
                                                            "type": "",
                                                            "value": "0x00"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4768:5:59"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4768:11:59"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "returnValue",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4753:11:59"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 12301,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4629:7:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12309,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4642:13:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12309,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4670:13:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12322,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4710:10:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12325,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4753:11:59",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 12319,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "4600:7:59",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 12327,
                                    "nodeType": "InlineAssembly",
                                    "src": "4577:212:59"
                                },
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 12336,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "id": 12332,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 12328,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12319,
                                                "src": "4806:7:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "&&",
                                            "rightExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 12331,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 12329,
                                                    "name": "returnSize",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 12322,
                                                    "src": "4817:10:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "hexValue": "30783230",
                                                    "id": 12330,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "4831:4:59",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_32_by_1",
                                                        "typeString": "int_const 32"
                                                    },
                                                    "value": "0x20"
                                                },
                                                "src": "4817:18:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "src": "4806:29:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 12335,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 12333,
                                                "name": "returnValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12325,
                                                "src": "4839:11:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": ">",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 12334,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4853:1:59",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "4839:15:59",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "4806:48:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 12307,
                                    "id": 12337,
                                    "nodeType": "Return",
                                    "src": "4799:55:59"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12299,
                            "nodeType": "StructuredDocumentation",
                            "src": "3566:652:59",
                            "text": " @notice Query if a contract implements an interface, does not check ERC165 support\n @param account The address of the contract to query for support of an interface\n @param interfaceId The interface identifier, as specified in ERC-165\n @return true if the contract at account indicates support of the interface with\n identifier interfaceId, false otherwise\n @dev Assumes that account contains a contract that supports ERC165, otherwise\n the behavior of this method is undefined. This precondition can be checked\n with {supportsERC165}.\n Interface identification is specified in ERC-165."
                        },
                        "id": 12339,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_supportsERC165Interface",
                        "nameLocation": "4232:24:59",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12304,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12301,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "4265:7:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12339,
                                    "src": "4257:15:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12300,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4257:7:59",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12303,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "4281:11:59",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12339,
                                    "src": "4274:18:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 12302,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4274:6:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4256:37:59"
                        },
                        "returnParameters": {
                            "id": 12307,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12306,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12339,
                                    "src": "4316:4:59",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 12305,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4316:4:59",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4315:6:59"
                        },
                        "scope": 12340,
                        "src": "4223:638:59",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "private"
                    }
                ],
                "scope": 12341,
                "src": "449:4414:59",
                "usedErrors": []
            }
        ],
        "src": "121:4743:59"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.284Z",
    "devdoc": {
        "details": "Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.",
        "kind": "dev",
        "methods": {},
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
    }
}
