{
  "contractName": "PubkeyResolver",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "x",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "y",
          "type": "bytes32"
        }
      ],
      "name": "PubkeyChanged",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "x",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "y",
          "type": "bytes32"
        }
      ],
      "name": "setPubkey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "pubkey",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "x",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "y",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"pubkey(bytes32)\":{\"params\":{\"node\":\"The ENS node to query\"},\"return\":\"x, y the X and Y coordinates of the curve point for the public key.\"},\"setPubkey(bytes32,bytes32,bytes32)\":{\"params\":{\"node\":\"The ENS node to query\",\"x\":\"the X coordinate of the curve point for the public key.\",\"y\":\"the Y coordinate of the curve point for the public key.\"}}}},\"userdoc\":{\"methods\":{\"pubkey(bytes32)\":{\"notice\":\"Returns the SECP256k1 public key associated with an ENS node. Defined in EIP 619.\"},\"setPubkey(bytes32,bytes32,bytes32)\":{\"notice\":\"Sets the SECP256k1 public key associated with an ENS node.\"}}}},\"settings\":{\"compilationTarget\":{\"@ensdomains/resolver/contracts/profiles/PubkeyResolver.sol\":\"PubkeyResolver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@ensdomains/resolver/contracts/ResolverBase.sol\":{\"keccak256\":\"0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8\",\"urls\":[\"bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00\",\"dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp\"]},\"@ensdomains/resolver/contracts/profiles/PubkeyResolver.sol\":{\"keccak256\":\"0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a\",\"urls\":[\"bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862\",\"dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity ^0.5.0;\n\nimport \"../ResolverBase.sol\";\n\ncontract PubkeyResolver is ResolverBase {\n    bytes4 constant private PUBKEY_INTERFACE_ID = 0xc8690233;\n\n    event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);\n\n    struct PublicKey {\n        bytes32 x;\n        bytes32 y;\n    }\n\n    mapping(bytes32=>PublicKey) pubkeys;\n\n    /**\n     * Sets the SECP256k1 public key associated with an ENS node.\n     * @param node The ENS node to query\n     * @param x the X coordinate of the curve point for the public key.\n     * @param y the Y coordinate of the curve point for the public key.\n     */\n    function setPubkey(bytes32 node, bytes32 x, bytes32 y) external authorised(node) {\n        pubkeys[node] = PublicKey(x, y);\n        emit PubkeyChanged(node, x, y);\n    }\n\n    /**\n     * Returns the SECP256k1 public key associated with an ENS node.\n     * Defined in EIP 619.\n     * @param node The ENS node to query\n     * @return x, y the X and Y coordinates of the curve point for the public key.\n     */\n    function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y) {\n        return (pubkeys[node].x, pubkeys[node].y);\n    }\n\n    function supportsInterface(bytes4 interfaceID) public pure returns(bool) {\n        return interfaceID == PUBKEY_INTERFACE_ID || super.supportsInterface(interfaceID);\n    }\n}\n",
  "sourcePath": "@ensdomains/resolver/contracts/profiles/PubkeyResolver.sol",
  "ast": {
    "absolutePath": "@ensdomains/resolver/contracts/profiles/PubkeyResolver.sol",
    "exportedSymbols": {
      "PubkeyResolver": [
        10698
      ]
    },
    "id": 10699,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10609,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:40"
      },
      {
        "absolutePath": "@ensdomains/resolver/contracts/ResolverBase.sol",
        "file": "../ResolverBase.sol",
        "id": 10610,
        "nodeType": "ImportDirective",
        "scope": 10699,
        "sourceUnit": 9555,
        "src": "25:29:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10611,
              "name": "ResolverBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9554,
              "src": "83:12:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ResolverBase_$9554",
                "typeString": "contract ResolverBase"
              }
            },
            "id": 10612,
            "nodeType": "InheritanceSpecifier",
            "src": "83:12:40"
          }
        ],
        "contractDependencies": [
          9554
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 10698,
        "linearizedBaseContracts": [
          10698,
          9554
        ],
        "name": "PubkeyResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 10615,
            "name": "PUBKEY_INTERFACE_ID",
            "nodeType": "VariableDeclaration",
            "scope": 10698,
            "src": "102:56:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 10613,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "102:6:40",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786338363930323333",
              "id": 10614,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "148:10:40",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3362325043_by_1",
                "typeString": "int_const 3362325043"
              },
              "value": "0xc8690233"
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 10623,
            "name": "PubkeyChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 10622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10617,
                  "indexed": true,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10623,
                  "src": "185:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10616,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "185:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10619,
                  "indexed": false,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 10623,
                  "src": "207:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10618,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "207:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10621,
                  "indexed": false,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 10623,
                  "src": "218:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10620,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "218:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "184:44:40"
            },
            "src": "165:64:40"
          },
          {
            "canonicalName": "PubkeyResolver.PublicKey",
            "id": 10628,
            "members": [
              {
                "constant": false,
                "id": 10625,
                "name": "x",
                "nodeType": "VariableDeclaration",
                "scope": 10628,
                "src": "262:9:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 10624,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "262:7:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 10627,
                "name": "y",
                "nodeType": "VariableDeclaration",
                "scope": 10628,
                "src": "281:9:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 10626,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "281:7:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "PublicKey",
            "nodeType": "StructDefinition",
            "scope": 10698,
            "src": "235:62:40",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10632,
            "name": "pubkeys",
            "nodeType": "VariableDeclaration",
            "scope": 10698,
            "src": "303:35:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
              "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey)"
            },
            "typeName": {
              "id": 10631,
              "keyType": {
                "id": 10629,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "311:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "303:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
                "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey)"
              },
              "valueType": {
                "contractScope": null,
                "id": 10630,
                "name": "PublicKey",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 10628,
                "src": "320:9:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PublicKey_$10628_storage_ptr",
                  "typeString": "struct PubkeyResolver.PublicKey"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10659,
              "nodeType": "Block",
              "src": "693:88:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 10644,
                        "name": "pubkeys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10632,
                        "src": "703:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
                          "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey storage ref)"
                        }
                      },
                      "id": 10646,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 10645,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10634,
                        "src": "711:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "703:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PublicKey_$10628_storage",
                        "typeString": "struct PubkeyResolver.PublicKey storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 10648,
                          "name": "x",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10636,
                          "src": "729:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 10649,
                          "name": "y",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10638,
                          "src": "732:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 10647,
                        "name": "PublicKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10628,
                        "src": "719:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_PublicKey_$10628_storage_ptr_$",
                          "typeString": "type(struct PubkeyResolver.PublicKey storage pointer)"
                        }
                      },
                      "id": 10650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "719:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PublicKey_$10628_memory",
                        "typeString": "struct PubkeyResolver.PublicKey memory"
                      }
                    },
                    "src": "703:31:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PublicKey_$10628_storage",
                      "typeString": "struct PubkeyResolver.PublicKey storage ref"
                    }
                  },
                  "id": 10652,
                  "nodeType": "ExpressionStatement",
                  "src": "703:31:40"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10654,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10634,
                        "src": "763:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10655,
                        "name": "x",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10636,
                        "src": "769:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10656,
                        "name": "y",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10638,
                        "src": "772:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 10653,
                      "name": "PubkeyChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10623,
                      "src": "749:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32,bytes32,bytes32)"
                      }
                    },
                    "id": 10657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "749:25:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10658,
                  "nodeType": "EmitStatement",
                  "src": "744:30:40"
                }
              ]
            },
            "documentation": "Sets the SECP256k1 public key associated with an ENS node.\n@param node The ENS node to query\n@param x the X coordinate of the curve point for the public key.\n@param y the Y coordinate of the curve point for the public key.",
            "id": 10660,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 10641,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10634,
                    "src": "687:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10642,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 10640,
                  "name": "authorised",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9521,
                  "src": "676:10:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "676:16:40"
              }
            ],
            "name": "setPubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10634,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10660,
                  "src": "631:12:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10633,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "631:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10636,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 10660,
                  "src": "645:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10635,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "645:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10638,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 10660,
                  "src": "656:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10637,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "656:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "630:36:40"
            },
            "returnParameters": {
              "id": 10643,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "693:0:40"
            },
            "scope": 10698,
            "src": "612:169:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10679,
              "nodeType": "Block",
              "src": "1098:58:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 10669,
                            "name": "pubkeys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10632,
                            "src": "1116:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
                              "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey storage ref)"
                            }
                          },
                          "id": 10671,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 10670,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10662,
                            "src": "1124:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1116:13:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PublicKey_$10628_storage",
                            "typeString": "struct PubkeyResolver.PublicKey storage ref"
                          }
                        },
                        "id": 10672,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10625,
                        "src": "1116:15:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 10673,
                            "name": "pubkeys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10632,
                            "src": "1133:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
                              "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey storage ref)"
                            }
                          },
                          "id": 10675,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 10674,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10662,
                            "src": "1141:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1133:13:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PublicKey_$10628_storage",
                            "typeString": "struct PubkeyResolver.PublicKey storage ref"
                          }
                        },
                        "id": 10676,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "y",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10627,
                        "src": "1133:15:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "id": 10677,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1115:34:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$",
                      "typeString": "tuple(bytes32,bytes32)"
                    }
                  },
                  "functionReturnParameters": 10668,
                  "id": 10678,
                  "nodeType": "Return",
                  "src": "1108:41:40"
                }
              ]
            },
            "documentation": "Returns the SECP256k1 public key associated with an ENS node.\nDefined in EIP 619.\n@param node The ENS node to query\n@return x, y the X and Y coordinates of the curve point for the public key.",
            "id": 10680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10662,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10680,
                  "src": "1039:12:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10661,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1039:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1038:14:40"
            },
            "returnParameters": {
              "id": 10668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10665,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 10680,
                  "src": "1076:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10664,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10667,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 10680,
                  "src": "1087:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10666,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1087:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1075:22:40"
            },
            "scope": 10698,
            "src": "1023:133:40",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10696,
              "nodeType": "Block",
              "src": "1235:98:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 10694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 10689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 10687,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10682,
                        "src": "1252:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 10688,
                        "name": "PUBKEY_INTERFACE_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10615,
                        "src": "1267:19:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "1252:34:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 10692,
                          "name": "interfaceID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10682,
                          "src": "1314:11:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 10690,
                          "name": "super",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13119,
                          "src": "1290:5:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_super$_PubkeyResolver_$10698",
                            "typeString": "contract super PubkeyResolver"
                          }
                        },
                        "id": 10691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "supportsInterface",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9502,
                        "src": "1290:23:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes4_$returns$_t_bool_$",
                          "typeString": "function (bytes4) pure returns (bool)"
                        }
                      },
                      "id": 10693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1290:36:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1252:74:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 10686,
                  "id": 10695,
                  "nodeType": "Return",
                  "src": "1245:81:40"
                }
              ]
            },
            "documentation": null,
            "id": 10697,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10682,
                  "name": "interfaceID",
                  "nodeType": "VariableDeclaration",
                  "scope": 10697,
                  "src": "1189:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 10681,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "1189:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1188:20:40"
            },
            "returnParameters": {
              "id": 10686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10685,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10697,
                  "src": "1229:4:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 10684,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1229:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1228:6:40"
            },
            "scope": 10698,
            "src": "1162:171:40",
            "stateMutability": "pure",
            "superFunction": 9502,
            "visibility": "public"
          }
        ],
        "scope": 10699,
        "src": "56:1279:40"
      }
    ],
    "src": "0:1336:40"
  },
  "legacyAST": {
    "absolutePath": "@ensdomains/resolver/contracts/profiles/PubkeyResolver.sol",
    "exportedSymbols": {
      "PubkeyResolver": [
        10698
      ]
    },
    "id": 10699,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10609,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:40"
      },
      {
        "absolutePath": "@ensdomains/resolver/contracts/ResolverBase.sol",
        "file": "../ResolverBase.sol",
        "id": 10610,
        "nodeType": "ImportDirective",
        "scope": 10699,
        "sourceUnit": 9555,
        "src": "25:29:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10611,
              "name": "ResolverBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9554,
              "src": "83:12:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ResolverBase_$9554",
                "typeString": "contract ResolverBase"
              }
            },
            "id": 10612,
            "nodeType": "InheritanceSpecifier",
            "src": "83:12:40"
          }
        ],
        "contractDependencies": [
          9554
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 10698,
        "linearizedBaseContracts": [
          10698,
          9554
        ],
        "name": "PubkeyResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 10615,
            "name": "PUBKEY_INTERFACE_ID",
            "nodeType": "VariableDeclaration",
            "scope": 10698,
            "src": "102:56:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 10613,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "102:6:40",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786338363930323333",
              "id": 10614,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "148:10:40",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3362325043_by_1",
                "typeString": "int_const 3362325043"
              },
              "value": "0xc8690233"
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 10623,
            "name": "PubkeyChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 10622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10617,
                  "indexed": true,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10623,
                  "src": "185:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10616,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "185:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10619,
                  "indexed": false,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 10623,
                  "src": "207:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10618,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "207:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10621,
                  "indexed": false,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 10623,
                  "src": "218:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10620,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "218:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "184:44:40"
            },
            "src": "165:64:40"
          },
          {
            "canonicalName": "PubkeyResolver.PublicKey",
            "id": 10628,
            "members": [
              {
                "constant": false,
                "id": 10625,
                "name": "x",
                "nodeType": "VariableDeclaration",
                "scope": 10628,
                "src": "262:9:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 10624,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "262:7:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 10627,
                "name": "y",
                "nodeType": "VariableDeclaration",
                "scope": 10628,
                "src": "281:9:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 10626,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "281:7:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "PublicKey",
            "nodeType": "StructDefinition",
            "scope": 10698,
            "src": "235:62:40",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10632,
            "name": "pubkeys",
            "nodeType": "VariableDeclaration",
            "scope": 10698,
            "src": "303:35:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
              "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey)"
            },
            "typeName": {
              "id": 10631,
              "keyType": {
                "id": 10629,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "311:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "303:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
                "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey)"
              },
              "valueType": {
                "contractScope": null,
                "id": 10630,
                "name": "PublicKey",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 10628,
                "src": "320:9:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PublicKey_$10628_storage_ptr",
                  "typeString": "struct PubkeyResolver.PublicKey"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10659,
              "nodeType": "Block",
              "src": "693:88:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 10644,
                        "name": "pubkeys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10632,
                        "src": "703:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
                          "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey storage ref)"
                        }
                      },
                      "id": 10646,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 10645,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10634,
                        "src": "711:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "703:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PublicKey_$10628_storage",
                        "typeString": "struct PubkeyResolver.PublicKey storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 10648,
                          "name": "x",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10636,
                          "src": "729:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 10649,
                          "name": "y",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10638,
                          "src": "732:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 10647,
                        "name": "PublicKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10628,
                        "src": "719:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_PublicKey_$10628_storage_ptr_$",
                          "typeString": "type(struct PubkeyResolver.PublicKey storage pointer)"
                        }
                      },
                      "id": 10650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "719:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PublicKey_$10628_memory",
                        "typeString": "struct PubkeyResolver.PublicKey memory"
                      }
                    },
                    "src": "703:31:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PublicKey_$10628_storage",
                      "typeString": "struct PubkeyResolver.PublicKey storage ref"
                    }
                  },
                  "id": 10652,
                  "nodeType": "ExpressionStatement",
                  "src": "703:31:40"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10654,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10634,
                        "src": "763:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10655,
                        "name": "x",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10636,
                        "src": "769:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10656,
                        "name": "y",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10638,
                        "src": "772:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 10653,
                      "name": "PubkeyChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10623,
                      "src": "749:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32,bytes32,bytes32)"
                      }
                    },
                    "id": 10657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "749:25:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10658,
                  "nodeType": "EmitStatement",
                  "src": "744:30:40"
                }
              ]
            },
            "documentation": "Sets the SECP256k1 public key associated with an ENS node.\n@param node The ENS node to query\n@param x the X coordinate of the curve point for the public key.\n@param y the Y coordinate of the curve point for the public key.",
            "id": 10660,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 10641,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10634,
                    "src": "687:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10642,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 10640,
                  "name": "authorised",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9521,
                  "src": "676:10:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "676:16:40"
              }
            ],
            "name": "setPubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10634,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10660,
                  "src": "631:12:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10633,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "631:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10636,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 10660,
                  "src": "645:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10635,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "645:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10638,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 10660,
                  "src": "656:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10637,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "656:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "630:36:40"
            },
            "returnParameters": {
              "id": 10643,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "693:0:40"
            },
            "scope": 10698,
            "src": "612:169:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10679,
              "nodeType": "Block",
              "src": "1098:58:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 10669,
                            "name": "pubkeys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10632,
                            "src": "1116:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
                              "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey storage ref)"
                            }
                          },
                          "id": 10671,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 10670,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10662,
                            "src": "1124:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1116:13:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PublicKey_$10628_storage",
                            "typeString": "struct PubkeyResolver.PublicKey storage ref"
                          }
                        },
                        "id": 10672,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10625,
                        "src": "1116:15:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 10673,
                            "name": "pubkeys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10632,
                            "src": "1133:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$10628_storage_$",
                              "typeString": "mapping(bytes32 => struct PubkeyResolver.PublicKey storage ref)"
                            }
                          },
                          "id": 10675,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 10674,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10662,
                            "src": "1141:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1133:13:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PublicKey_$10628_storage",
                            "typeString": "struct PubkeyResolver.PublicKey storage ref"
                          }
                        },
                        "id": 10676,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "y",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10627,
                        "src": "1133:15:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "id": 10677,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1115:34:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$",
                      "typeString": "tuple(bytes32,bytes32)"
                    }
                  },
                  "functionReturnParameters": 10668,
                  "id": 10678,
                  "nodeType": "Return",
                  "src": "1108:41:40"
                }
              ]
            },
            "documentation": "Returns the SECP256k1 public key associated with an ENS node.\nDefined in EIP 619.\n@param node The ENS node to query\n@return x, y the X and Y coordinates of the curve point for the public key.",
            "id": 10680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10662,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 10680,
                  "src": "1039:12:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10661,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1039:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1038:14:40"
            },
            "returnParameters": {
              "id": 10668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10665,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 10680,
                  "src": "1076:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10664,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10667,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 10680,
                  "src": "1087:9:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10666,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1087:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1075:22:40"
            },
            "scope": 10698,
            "src": "1023:133:40",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10696,
              "nodeType": "Block",
              "src": "1235:98:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 10694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 10689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 10687,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10682,
                        "src": "1252:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 10688,
                        "name": "PUBKEY_INTERFACE_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10615,
                        "src": "1267:19:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "1252:34:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 10692,
                          "name": "interfaceID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10682,
                          "src": "1314:11:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 10690,
                          "name": "super",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13119,
                          "src": "1290:5:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_super$_PubkeyResolver_$10698",
                            "typeString": "contract super PubkeyResolver"
                          }
                        },
                        "id": 10691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "supportsInterface",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9502,
                        "src": "1290:23:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes4_$returns$_t_bool_$",
                          "typeString": "function (bytes4) pure returns (bool)"
                        }
                      },
                      "id": 10693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1290:36:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1252:74:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 10686,
                  "id": 10695,
                  "nodeType": "Return",
                  "src": "1245:81:40"
                }
              ]
            },
            "documentation": null,
            "id": 10697,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10682,
                  "name": "interfaceID",
                  "nodeType": "VariableDeclaration",
                  "scope": 10697,
                  "src": "1189:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 10681,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "1189:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1188:20:40"
            },
            "returnParameters": {
              "id": 10686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10685,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10697,
                  "src": "1229:4:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 10684,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1229:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1228:6:40"
            },
            "scope": 10698,
            "src": "1162:171:40",
            "stateMutability": "pure",
            "superFunction": 9502,
            "visibility": "public"
          }
        ],
        "scope": 10699,
        "src": "56:1279:40"
      }
    ],
    "src": "0:1336:40"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-06-17T12:57:44.994Z",
  "devdoc": {
    "methods": {
      "pubkey(bytes32)": {
        "params": {
          "node": "The ENS node to query"
        },
        "return": "x, y the X and Y coordinates of the curve point for the public key."
      },
      "setPubkey(bytes32,bytes32,bytes32)": {
        "params": {
          "node": "The ENS node to query",
          "x": "the X coordinate of the curve point for the public key.",
          "y": "the Y coordinate of the curve point for the public key."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "pubkey(bytes32)": {
        "notice": "Returns the SECP256k1 public key associated with an ENS node. Defined in EIP 619."
      },
      "setPubkey(bytes32,bytes32,bytes32)": {
        "notice": "Sets the SECP256k1 public key associated with an ENS node."
      }
    }
  }
}