{
  "contractName": "AuthereumEnsManager",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "ADDR_REVERSE_NODE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "authereumEnsResolver",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rootName",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rootNode",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_rootName",
          "type": "string"
        },
        {
          "name": "_rootNode",
          "type": "bytes32"
        },
        {
          "name": "_ensRegistry",
          "type": "address"
        },
        {
          "name": "_authereumEnsResolver",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "rootnode",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "RootnodeOwnerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "rootnode",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "newResolver",
          "type": "address"
        }
      ],
      "name": "RootnodeResolverChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "rootnode",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "newTtl",
          "type": "uint64"
        }
      ],
      "name": "RootnodeTTLChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "AuthereumEnsResolverChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "ens",
          "type": "string"
        }
      ],
      "name": "Registered",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_node",
          "type": "bytes32"
        }
      ],
      "name": "resolveEns",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEnsRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEnsReverseRegistrar",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "changeRootnodeOwner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newResolver",
          "type": "address"
        }
      ],
      "name": "changeRootnodeResolver",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newTtl",
          "type": "uint64"
        }
      ],
      "name": "changeRootnodeTTL",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authereumEnsResolver",
          "type": "address"
        }
      ],
      "name": "changeEnsResolver",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_label",
          "type": "string"
        },
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "register",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_subnode",
          "type": "bytes32"
        }
      ],
      "name": "isAvailable",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"_newTtl\",\"type\":\"uint64\"}],\"name\":\"changeRootnodeTTL\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_label\",\"type\":\"string\"},{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getEnsReverseRegistrar\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getEnsRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADDR_REVERSE_NODE\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newResolver\",\"type\":\"address\"}],\"name\":\"changeRootnodeResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeRootnodeOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_subnode\",\"type\":\"bytes32\"}],\"name\":\"isAvailable\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authereumEnsResolver\",\"type\":\"address\"}],\"name\":\"changeEnsResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"}],\"name\":\"resolveEns\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authereumEnsResolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rootName\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rootNode\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_rootName\",\"type\":\"string\"},{\"name\":\"_rootNode\",\"type\":\"bytes32\"},{\"name\":\"_ensRegistry\",\"type\":\"address\"},{\"name\":\"_authereumEnsResolver\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"rootnode\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"RootnodeOwnerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"rootnode\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"newResolver\",\"type\":\"address\"}],\"name\":\"RootnodeResolverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"rootnode\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"newTtl\",\"type\":\"uint64\"}],\"name\":\"RootnodeTTLChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AuthereumEnsResolverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"ens\",\"type\":\"string\"}],\"name\":\"Registered\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Used to manage all subdomains.This is also known as the Authereum registrar.The public ENS registry is used. The resolver is custom.\",\"methods\":{\"changeEnsResolver(address)\":{\"details\":\"Lets the owner change the address of the Authereum ENS resolver contract\",\"params\":{\"_authereumEnsResolver\":\"The address of the Authereun ENS resolver contract\"}},\"changeRootnodeOwner(address)\":{\"details\":\"This function is used when the rootnode owner is updated\",\"params\":{\"_newOwner\":\"The address of the new ENS manager that will manage the root node.\"}},\"changeRootnodeResolver(address)\":{\"details\":\"This function is used when the rootnode resolver is updated\",\"params\":{\"_newResolver\":\"The address of the new ENS Resolver that will manage the root node.\"}},\"changeRootnodeTTL(uint64)\":{\"details\":\"This function is used when the rootnode TTL is updated\",\"params\":{\"_newTtl\":\"The address of the new TTL that will manage the root node.\"}},\"constructor\":{\"details\":\"Constructor that sets the ENS root name and root node to manage\",\"params\":{\"_authereumEnsResolver\":\"Custom Autheruem ENS Resolver address\",\"_ensRegistry\":\"Custom ENS Registry address\",\"_rootName\":\"The root name (e.g. authereum.eth)\",\"_rootNode\":\"The node of the root name (e.g. namehash(authereum.eth))\"}},\"getEnsRegistry()\":{\"details\":\"Gets the official ENS registry.\"},\"getEnsReverseRegistrar()\":{\"details\":\"Gets the official ENS reverse registrar.\"},\"isAvailable(bytes32)\":{\"details\":\"Returns true is a given subnode is available\",\"params\":{\"_subnode\":\"The target subnode\"},\"return\":\"true if the subnode is available\"},\"register(string,address)\":{\"details\":\"Lets the manager assign an ENS subdomain of the root node to a target address.      Registers both the forward and reverse ENS\",\"params\":{\"_label\":\"The subdomain label\",\"_owner\":\"The owner of the subdomain\"}},\"resolveEns(bytes32)\":{\"details\":\"Resolves an ENS name to an address.\",\"params\":{\"_node\":\"The namehash of the ENS name.\"}}},\"title\":\"AuthereumEnsManager\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSManager.sol\":\"AuthereumEnsManager\"},\"evmVersion\":\"constantinople\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/base/Managed.sol\":{\"keccak256\":\"0x772fed8abcd2e320091b9b65016673e4d50f282e246f568f9d9b7bff48549110\",\"urls\":[\"bzzr://300a7604c061a3fb9bd26a35f5ebba83ca4f9025669d6bfbfcbf86506c14a7df\"]},\"/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/base/Owned.sol\":{\"keccak256\":\"0xb62cee91e071db06bf2a3c5217bacd91da817274a93713a7c108c05d74f9cd3e\",\"urls\":[\"bzzr://c1a00beeb6ae93f5467733667db8eaed21de577e98ab4c53524a818515d764ee\"]},\"/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSManager.sol\":{\"keccak256\":\"0xe7d01f66ecf2e3a91852d41b33161a438af77383830b409b6d808024c21938b1\",\"urls\":[\"bzzr://f9d261ac2dee660d0f0a76b832a4ad5534b031c4546df3abc22389f79293b212\"]},\"/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/ens/ENS.sol\":{\"keccak256\":\"0xfacd46ed3aec04b33ece77b9c7173c35beec37a2aa18c29304402a552faa3fe6\",\"urls\":[\"bzzr://315f35a8cbc61aad447688300ae2eef759ba1543c1b610d6aae7db986df0a3df\"]},\"/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/utils/strings.sol\":{\"keccak256\":\"0xbfa9ea0b0a379ad5349724dc719a94c8d99bfe460174a40c9396bd5fe5b6dfd7\",\"urls\":[\"bzzr://eb1ee6c8d6d895dd81d81bf7459d1661daac1ac50fed27509a01011c690c0da0\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200202338038062002023833981018060405260808110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051906020019092919080519060200190929190805190602001909291905050508360019080519060200190620000c692919062000159565b5082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000208565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200019c57805160ff1916838001178555620001cd565b82800160010185558215620001cd579182015b82811115620001cc578251825591602001919060010190620001af565b5b509050620001dc9190620001e0565b5090565b6200020591905b8082111562000201576000816000905550600101620001e7565b5090565b90565b611e0b80620002186000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806386605d961161008c5780639eb869c7116100665780639eb869c714610369578063b179fe6d146103d7578063f20387df14610421578063faff50a8146104a4576100cf565b806386605d961461029b57806389b6f027146102df5780638be9b4f114610325576100cf565b8063025485b3146100d45780631e59c5291461010c57806379b64713146101a55780637c6f945d146101ef5780637cf8a2eb1461023957806384fc3fa014610257575b600080fd5b61010a600480360360208110156100ea57600080fd5b81019080803567ffffffffffffffff1690602001909291905050506104c2565b005b6101a36004803603604081101561012257600080fd5b810190808035906020019064010000000081111561013f57600080fd5b82018360208201111561015157600080fd5b8035906020019184600183028401116401000000008311171561017357600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106db565b005b6101ad610f8d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f761104a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610241611073565b6040518082815260200191505060405180910390f35b6102996004803603602081101561026d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061109a565b005b6102dd600480360360208110156102b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061137a565b005b61030b600480360360208110156102f557600080fd5b810190808035906020019092919050505061165a565b604051808215151515815260200191505060405180910390f35b6103676004803603602081101561033b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611773565b005b6103956004803603602081101561037f57600080fd5b81019080803590602001909291905050506119e9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103df611b17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610429611b3d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561046957808201518184015260208101905061044e565b50505050905090810190601f1680156104965780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104ac611bdb565b6040518082815260200191505060405180910390f35b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561056157600080fd5b505afa158015610575573d6000803e3d6000fd5b505050506040513d602081101561058b57600080fd5b810190808051906020019092919050505061060e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b61061661104a565b73ffffffffffffffffffffffffffffffffffffffff166314ab9038600254836040518363ffffffff1660e01b8152600401808381526020018267ffffffffffffffff1667ffffffffffffffff16815260200192505050600060405180830381600087803b15801561068657600080fd5b505af115801561069a573d6000803e3d6000fd5b505050508067ffffffffffffffff166002547f847699899f587963de290fda4ce7e3898e4993a7026f0ddb9aab12d483f6b82a60405160405180910390a350565b600083836040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090506000600254826040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600061074e61104a565b73ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561079e57600080fd5b505afa1580156107b2573d6000803e3d6000fd5b505050506040513d60208110156107c857600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461087d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4c6162656c20697320616c7265616479206f776e65640000000000000000000081525060200191505060405180910390fd5b61088561104a565b73ffffffffffffffffffffffffffffffffffffffff166306ab592360025485306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561091557600080fd5b505af1158015610929573d6000803e3d6000fd5b5050505061093561104a565b73ffffffffffffffffffffffffffffffffffffffff16631896f70a83600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156109dd57600080fd5b505af11580156109f1573d6000803e3d6000fd5b505050506109fd61104a565b73ffffffffffffffffffffffffffffffffffffffff16635b0fc9c383866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610a8357600080fd5b505af1158015610a97573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5fa2b0083866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610b4457600080fd5b505af1158015610b58573d6000803e3d6000fd5b5050505060606002604051908082528060200260200182016040528015610b9957816020015b610b86611dab565b815260200190600190039081610b7e5790505b509050610be987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611be1565b81600081518110610bf657fe5b6020026020010181905250610ca460018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c9a5780601f10610c6f57610100808354040283529160200191610c9a565b820191906000526020600020905b815481529060010190602001808311610c7d57829003601f168201915b5050505050611be1565b81600181518110610cb157fe5b60200260200101819052506060610d0e82610d006040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250611be1565b611c0f90919063ffffffff16565b90506000610d1a610f8d565b73ffffffffffffffffffffffffffffffffffffffff1663bffbe61c886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610d9857600080fd5b505af1158015610dac573d6000803e3d6000fd5b505050506040513d6020811015610dc257600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e6a578082015181840152602081019050610e4f565b50505050905090810190601f168015610e975780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610eb757600080fd5b505af1158015610ecb573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fb3eccf73f39b1c07947c780b2b39df2a1bb058b4037b0a42d0881ca1a028a132836040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f48578082015181840152602081019050610f2d565b50505050905090810190601f168015610f755780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050505050505050565b6000610f9761104a565b73ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561100a57600080fd5b505afa15801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b81565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561113957600080fd5b505afa15801561114d573d6000803e3d6000fd5b505050506040513d602081101561116357600080fd5b81019080805190602001909291905050506111e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b61129161104a565b73ffffffffffffffffffffffffffffffffffffffff16631896f70a600254836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561131957600080fd5b505af115801561132d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166002547ff42bfe600d256550349c92e1fd55144c4027bef017f0eb184303a777eb3a7ae660405160405180910390a350565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561141957600080fd5b505afa15801561142d573d6000803e3d6000fd5b505050506040513d602081101561144357600080fd5b81019080805190602001909291905050506114c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611569576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b61157161104a565b73ffffffffffffffffffffffffffffffffffffffff16635b0fc9c3600254836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156115f957600080fd5b505af115801561160d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166002547f516d0db138244386233318abd545c7f39d1be56e4da256f941042d7e7114a97560405160405180910390a350565b600080600254836040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600061169a61104a565b73ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116ea57600080fd5b505afa1580156116fe573d6000803e3d6000fd5b505050506040513d602081101561171457600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117675760019250505061176e565b6000925050505b919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181257600080fd5b505afa158015611826573d6000803e3d6000fd5b505050506040513d602081101561183c57600080fd5b81019080805190602001909291905050506118bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fd88c10387565baf6122146fe04aea5611f4e9598ec7f4fc2c0ae7f09b18823b860405160405180910390a250565b6000806119f461104a565b73ffffffffffffffffffffffffffffffffffffffff16630178b8bf846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d6020811015611a6e57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16633b3b57de846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d6020811015611afe57600080fd5b8101908080519060200190929190505050915050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bd35780601f10611ba857610100808354040283529160200191611bd3565b820191906000526020600020905b815481529060010190602001808311611bb657829003601f168201915b505050505081565b60025481565b611be9611dc5565b600060208301905060405180604001604052808451815260200182815250915050919050565b6060600082511415611c3257604051806020016040528060008152509050611d5c565b60006001835103846000015102905060008090505b8351811015611c7957838181518110611c5c57fe5b602002602001015160000151820191508080600101915050611c47565b506060816040519080825280601f01601f191660200182016040528015611caf5781602001600182028038833980820191505090505b509050600060208201905060008090505b8551811015611d5457611d0282878381518110611cd957fe5b602002602001015160200151888481518110611cf157fe5b602002602001015160000151611d62565b858181518110611d0e57fe5b602002602001015160000151820191506001865103811015611d4757611d3d8288602001518960000151611d62565b8660000151820191505b8080600101915050611cc0565b508193505050505b92915050565b5b60208110611d865781518352602083019250602082019150602081039050611d63565b60006001826020036101000a0390508019835116818551168181178652505050505050565b604051806040016040528060008152602001600081525090565b60405180604001604052806000815260200160008152509056fea165627a7a7230582092e588c5a490592e474058dd63e3cbfccf35bd2b9e24cad00d230bb777666e3d0029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c806386605d961161008c5780639eb869c7116100665780639eb869c714610369578063b179fe6d146103d7578063f20387df14610421578063faff50a8146104a4576100cf565b806386605d961461029b57806389b6f027146102df5780638be9b4f114610325576100cf565b8063025485b3146100d45780631e59c5291461010c57806379b64713146101a55780637c6f945d146101ef5780637cf8a2eb1461023957806384fc3fa014610257575b600080fd5b61010a600480360360208110156100ea57600080fd5b81019080803567ffffffffffffffff1690602001909291905050506104c2565b005b6101a36004803603604081101561012257600080fd5b810190808035906020019064010000000081111561013f57600080fd5b82018360208201111561015157600080fd5b8035906020019184600183028401116401000000008311171561017357600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106db565b005b6101ad610f8d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f761104a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610241611073565b6040518082815260200191505060405180910390f35b6102996004803603602081101561026d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061109a565b005b6102dd600480360360208110156102b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061137a565b005b61030b600480360360208110156102f557600080fd5b810190808035906020019092919050505061165a565b604051808215151515815260200191505060405180910390f35b6103676004803603602081101561033b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611773565b005b6103956004803603602081101561037f57600080fd5b81019080803590602001909291905050506119e9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103df611b17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610429611b3d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561046957808201518184015260208101905061044e565b50505050905090810190601f1680156104965780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104ac611bdb565b6040518082815260200191505060405180910390f35b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561056157600080fd5b505afa158015610575573d6000803e3d6000fd5b505050506040513d602081101561058b57600080fd5b810190808051906020019092919050505061060e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b61061661104a565b73ffffffffffffffffffffffffffffffffffffffff166314ab9038600254836040518363ffffffff1660e01b8152600401808381526020018267ffffffffffffffff1667ffffffffffffffff16815260200192505050600060405180830381600087803b15801561068657600080fd5b505af115801561069a573d6000803e3d6000fd5b505050508067ffffffffffffffff166002547f847699899f587963de290fda4ce7e3898e4993a7026f0ddb9aab12d483f6b82a60405160405180910390a350565b600083836040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090506000600254826040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600061074e61104a565b73ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561079e57600080fd5b505afa1580156107b2573d6000803e3d6000fd5b505050506040513d60208110156107c857600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461087d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4c6162656c20697320616c7265616479206f776e65640000000000000000000081525060200191505060405180910390fd5b61088561104a565b73ffffffffffffffffffffffffffffffffffffffff166306ab592360025485306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561091557600080fd5b505af1158015610929573d6000803e3d6000fd5b5050505061093561104a565b73ffffffffffffffffffffffffffffffffffffffff16631896f70a83600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156109dd57600080fd5b505af11580156109f1573d6000803e3d6000fd5b505050506109fd61104a565b73ffffffffffffffffffffffffffffffffffffffff16635b0fc9c383866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610a8357600080fd5b505af1158015610a97573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5fa2b0083866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610b4457600080fd5b505af1158015610b58573d6000803e3d6000fd5b5050505060606002604051908082528060200260200182016040528015610b9957816020015b610b86611dab565b815260200190600190039081610b7e5790505b509050610be987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611be1565b81600081518110610bf657fe5b6020026020010181905250610ca460018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c9a5780601f10610c6f57610100808354040283529160200191610c9a565b820191906000526020600020905b815481529060010190602001808311610c7d57829003601f168201915b5050505050611be1565b81600181518110610cb157fe5b60200260200101819052506060610d0e82610d006040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250611be1565b611c0f90919063ffffffff16565b90506000610d1a610f8d565b73ffffffffffffffffffffffffffffffffffffffff1663bffbe61c886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610d9857600080fd5b505af1158015610dac573d6000803e3d6000fd5b505050506040513d6020811015610dc257600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e6a578082015181840152602081019050610e4f565b50505050905090810190601f168015610e975780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610eb757600080fd5b505af1158015610ecb573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fb3eccf73f39b1c07947c780b2b39df2a1bb058b4037b0a42d0881ca1a028a132836040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f48578082015181840152602081019050610f2d565b50505050905090810190601f168015610f755780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050505050505050565b6000610f9761104a565b73ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561100a57600080fd5b505afa15801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b81565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561113957600080fd5b505afa15801561114d573d6000803e3d6000fd5b505050506040513d602081101561116357600080fd5b81019080805190602001909291905050506111e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b61129161104a565b73ffffffffffffffffffffffffffffffffffffffff16631896f70a600254836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561131957600080fd5b505af115801561132d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166002547ff42bfe600d256550349c92e1fd55144c4027bef017f0eb184303a777eb3a7ae660405160405180910390a350565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561141957600080fd5b505afa15801561142d573d6000803e3d6000fd5b505050506040513d602081101561144357600080fd5b81019080805190602001909291905050506114c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611569576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b61157161104a565b73ffffffffffffffffffffffffffffffffffffffff16635b0fc9c3600254836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156115f957600080fd5b505af115801561160d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166002547f516d0db138244386233318abd545c7f39d1be56e4da256f941042d7e7114a97560405160405180910390a350565b600080600254836040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600061169a61104a565b73ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116ea57600080fd5b505afa1580156116fe573d6000803e3d6000fd5b505050506040513d602081101561171457600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117675760019250505061176e565b6000925050505b919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f54bf6e336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181257600080fd5b505afa158015611826573d6000803e3d6000fd5b505050506040513d602081101561183c57600080fd5b81019080805190602001909291905050506118bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fd88c10387565baf6122146fe04aea5611f4e9598ec7f4fc2c0ae7f09b18823b860405160405180910390a250565b6000806119f461104a565b73ffffffffffffffffffffffffffffffffffffffff16630178b8bf846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d6020811015611a6e57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16633b3b57de846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d6020811015611afe57600080fd5b8101908080519060200190929190505050915050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bd35780601f10611ba857610100808354040283529160200191611bd3565b820191906000526020600020905b815481529060010190602001808311611bb657829003601f168201915b505050505081565b60025481565b611be9611dc5565b600060208301905060405180604001604052808451815260200182815250915050919050565b6060600082511415611c3257604051806020016040528060008152509050611d5c565b60006001835103846000015102905060008090505b8351811015611c7957838181518110611c5c57fe5b602002602001015160000151820191508080600101915050611c47565b506060816040519080825280601f01601f191660200182016040528015611caf5781602001600182028038833980820191505090505b509050600060208201905060008090505b8551811015611d5457611d0282878381518110611cd957fe5b602002602001015160200151888481518110611cf157fe5b602002602001015160000151611d62565b858181518110611d0e57fe5b602002602001015160000151820191506001865103811015611d4757611d3d8288602001518960000151611d62565b8660000151820191505b8080600101915050611cc0565b508193505050505b92915050565b5b60208110611d865781518352602083019250602082019150602081039050611d63565b60006001826020036101000a0390508019835116818551168181178652505050505050565b604051806040016040528060008152602001600081525090565b60405180604001604052806000815260200160008152509056fea165627a7a7230582092e588c5a490592e474058dd63e3cbfccf35bd2b9e24cad00d230bb777666e3d0029",
  "sourceMap": "585:5855:7:-;;;1923:323;8:9:-1;5:2;;;30:1;27;20:12;5:2;1923:323:7;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1923:323:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;1923:323:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2110:9;2099:8;:20;;;;;;;;;;;;:::i;:::-;;2140:9;2129:8;:20;;;;2173:12;2159:11;;:26;;;;;;;;;;;;;;;;;;2218:21;2195:20;;:44;;;;;;;;;;;;;;;;;;1923:323;;;;585:5855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "585:5855:7:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;585:5855:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3992:173;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3992:173:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;4873:1063;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4873:1063:7;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4873:1063:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4873:1063:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4873:1063:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2758:162;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2590:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;677:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3561:275;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3561:275:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;3132:254;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3132:254:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;6134:304;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6134:304:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4345:283;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4345:283:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;2352:187;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2352:187:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;981:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;848:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;848:22:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;905:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3992:173;1490:20;;;;;;;;;;;1484:35;;;1520:10;1484:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:47:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:47:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1484:47:7;;;;;;;;;;;;;;;;1476:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4064:16;:14;:16::i;:::-;:23;;;4088:8;;4098:7;4064:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4064:42:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4064:42:7;;;;4150:7;4121:37;;4140:8;;4121:37;;;;;;;;;;3992:173;:::o;4873:1063::-;4950:17;4997:6;;4980:24;;;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;4980:24:7;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4980:24:7;;;4970:35;;;;;;4950:55;;5015:12;5057:8;;5067:9;5040:37;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5040:37:7;;;5030:48;;;;;;5015:63;;5088:20;5111:16;:14;:16::i;:::-;:22;;;5134:4;5111:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5111:28:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5111:28:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5111:28:7;;;;;;;;;;;;;;;;5088:51;;5181:1;5157:26;;:12;:26;;;5149:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5244:16;:14;:16::i;:::-;:32;;;5277:8;;5287:9;5306:4;5244:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5244:68:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5244:68:7;;;;5322:16;:14;:16::i;:::-;:28;;;5351:4;5357:20;;;;;;;;;;;5322:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5322:56:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5322:56:7;;;;5388:16;:14;:16::i;:::-;:25;;;5414:4;5420:6;5388:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5388:39:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5388:39:7;;;;5458:20;;;;;;;;;;;5437:50;;;5488:4;5494:6;5437:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5437:64:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5437:64:7;;;;5535:28;5586:1;5566:22;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;5535:53;;5609:16;:6;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5609:14:7;;;;;;;:16::i;:::-;5598:5;5604:1;5598:8;;;;;;;;;;;;;:27;;;;5646:18;:8;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18::i;:::-;5635:5;5641:1;5635:8;;;;;;;;;;;;;:29;;;;5674:18;5695:25;5714:5;5695:13;:11;;;;;;;;;;;;;;;;;;:13::i;:::-;:18;;:25;;;;:::i;:::-;5674:46;;5730:19;5772:24;:22;:24::i;:::-;5752:50;;;5803:6;5752:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5752:58:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5752:58:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5752:58:7;;;;;;;;;;;;;;;;5730:80;;5841:20;;;;;;;;;;;5820:50;;;5871:11;5884:4;5820:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5820:69:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5820:69:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5820:69:7;;;;5916:6;5905:24;;;5924:4;5905:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5905:24:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4873:1063;;;;;;;;;:::o;2758:162::-;2813:19;2871:16;:14;:16::i;:::-;:22;;;721:66;2894:17;;2871:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2871:41:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2871:41:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2871:41:7;;;;;;;;;;;;;;;;2844:69;;2758:162;:::o;2590:108::-;2637:11;2679;;;;;;;;;;;2660:31;;2590:108;:::o;677:110::-;721:66;677:110;;;:::o;3561:275::-;1490:20;;;;;;;;;;;1484:35;;;1520:10;1484:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:47:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:47:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1484:47:7;;;;;;;;;;;;;;;;1476:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3676:1;3652:26;;:12;:26;;;;3644:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3715:16;:14;:16::i;:::-;:28;;;3744:8;;3754:12;3715:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3715:52:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3715:52:7;;;;3816:12;3782:47;;3806:8;;3782:47;;;;;;;;;;3561:275;:::o;3132:254::-;1490:20;;;;;;;;;;;1484:35;;;1520:10;1484:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:47:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:47:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1484:47:7;;;;;;;;;;;;;;;;1476:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3238:1;3217:23;;:9;:23;;;;3209:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3277:16;:14;:16::i;:::-;:25;;;3303:8;;3313:9;3277:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3277:46:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3277:46:7;;;;3369:9;3338:41;;3359:8;;3338:41;;;;;;;;;;3132:254;:::o;6134:304::-;6194:4;6210:12;6252:8;;6262;6235:36;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6235:36:7;;;6225:47;;;;;;6210:62;;6282:20;6305:16;:14;:16::i;:::-;:22;;;6328:4;6305:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6305:28:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6305:28:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6305:28:7;;;;;;;;;;;;;;;;6282:51;;6370:1;6346:26;;:12;:26;;;6343:67;;;6395:4;6388:11;;;;;;6343:67;6426:5;6419:12;;;;6134:304;;;;:::o;4345:283::-;1490:20;;;;;;;;;;;1484:35;;;1520:10;1484:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:47:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:47:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1484:47:7;;;;;;;;;;;;;;;;1476:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4473:1;4440:35;;:21;:35;;;;4432:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4535:21;4512:20;;:44;;;;;;;;;;;;;;;;;;4599:21;4571:50;;;;;;;;;;;;4345:283;:::o;2352:187::-;2403:7;2422:16;2441;:14;:16::i;:::-;:25;;;2467:5;2441:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2441:32:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2441:32:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2441:32:7;;;;;;;;;;;;;;;;2422:51;;2511:8;2490:35;;;2526:5;2490:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2490:42:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2490:42:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2490:42:7;;;;;;;;;;;;;;;;2483:49;;;2352:187;;;:::o;981:35::-;;;;;;;;;;;;;:::o;848:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;905:23::-;;;;:::o;2857:210:15:-;2917:12;;:::i;:::-;2941:8;2999:4;2993;2989:15;2982:22;;3030:30;;;;;;;;3042:4;3036:18;3030:30;;;;3056:3;3030:30;;;3023:37;;;2857:210;;;:::o;24698:728::-;24776:13;24821:1;24805:5;:12;:17;24801:44;;;24836:9;;;;;;;;;;;;;;;;24801:44;24856:11;24898:1;24883:5;:12;:16;24870:4;:9;;;:30;24856:44;;24914:6;24923:1;24914:10;;24910:74;24930:5;:12;24926:1;:16;24910:74;;;24971:5;24977:1;24971:8;;;;;;;;;;;;;;:13;;;24961:23;;;;24944:3;;;;;;;24910:74;;;;24995:17;25026:6;25015:18;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;25015:18:15;;;;24995:38;;25043:11;25094:2;25089:3;25085:12;25075:22;;25113:6;25122:1;25113:10;;25109:290;25129:5;:12;25125:1;:16;25109:290;;;25162:44;25169:6;25177:5;25183:1;25177:8;;;;;;;;;;;;;;:13;;;25192:5;25198:1;25192:8;;;;;;;;;;;;;;:13;;;25162:6;:44::i;:::-;25230:5;25236:1;25230:8;;;;;;;;;;;;;;:13;;;25220:23;;;;25280:1;25265:5;:12;:16;25261:1;:20;25257:132;;;25301:36;25308:6;25316:4;:9;;;25327:4;:9;;;25301:6;:36::i;:::-;25365:4;:9;;;25355:19;;;;25257:132;25143:3;;;;;;;25109:290;;;;25416:3;25409:10;;;;;24698:728;;;;;:::o;2109:548::-;2229:164;2242:2;2235:3;:9;2229:164;;2317:3;2311:10;2305:4;2298:24;2357:2;2349:10;;;;2380:2;2373:9;;;;2253:2;2246:9;;;;2229:164;;;2435:9;2467:1;2460:3;2455:2;:8;2447:3;:17;:21;2435:33;;2536:4;2532:9;2526:3;2520:10;2516:26;2588:4;2581;2575:11;2571:22;2632:7;2622:8;2619:21;2613:4;2606:35;2487:164;;;;;;:::o;585:5855:7:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.8;\n\nimport \"./ENS.sol\";\nimport \"../utils/strings.sol\";\nimport \"../base/Managed.sol\";\n\ncontract AuthereumEnsResolver{\n    function addManager(address _manager) external {}\n    function setAddr(bytes32 node, address addr) external {}\n    function setName(bytes32 node, string calldata name) external {}\n    function addr(bytes32 node) external returns (address) {}\n}\n\n/**\n * @title AuthereumEnsManager\n * @dev Used to manage all subdomains.\n * @dev This is also known as the Authereum registrar.\n * @dev The public ENS registry is used. The resolver is custom.\n */\n\ncontract AuthereumEnsManager {\n    using strings for *;\n    // namehash('addr.reverse')\n    bytes32 constant public ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\n    address ensRegistry;\n\n    // The managed root name\n    string public rootName;\n    // The managed root node\n    bytes32 public rootNode;\n    // The address of the authereumEnsResolver\n    address public authereumEnsResolver;\n\n    event RootnodeOwnerChanged(bytes32 indexed rootnode, address indexed newOwner);\n    event RootnodeResolverChanged(bytes32 indexed rootnode, address indexed newResolver);\n    event RootnodeTTLChanged(bytes32 indexed rootnode, uint64 indexed newTtl);\n    event AuthereumEnsResolverChanged(address indexed addr);\n    event Registered(address indexed owner, string ens);\n\n    /// @dev Throws if the sender is not the owner.\n    modifier onlyOwner {\n        require(Owned(authereumEnsResolver).isOwner(msg.sender), \"Must be owner\");\n        _;\n    }\n\n    /// @dev Constructor that sets the ENS root name and root node to manage\n    /// @param _rootName The root name (e.g. authereum.eth)\n    /// @param _rootNode The node of the root name (e.g. namehash(authereum.eth))\n    /// @param _ensRegistry Custom ENS Registry address\n    /// @param _authereumEnsResolver Custom Autheruem ENS Resolver address\n    constructor(\n        string memory _rootName,\n        bytes32 _rootNode,\n        address _ensRegistry,\n        address _authereumEnsResolver\n    )\n        public\n    {\n        rootName = _rootName;\n        rootNode = _rootNode;\n        ensRegistry = _ensRegistry;\n        authereumEnsResolver = _authereumEnsResolver;\n    }\n\n    /// @dev Resolves an ENS name to an address.\n    /// @param _node The namehash of the ENS name.\n    function resolveEns(bytes32 _node) public returns (address) {\n        address resolver = getEnsRegistry().resolver(_node);\n        return AuthereumEnsResolver(resolver).addr(_node);\n    }\n\n    /// @dev Gets the official ENS registry.\n    function getEnsRegistry() public view returns (EnsRegistry) {\n        return EnsRegistry(ensRegistry);\n    }\n\n    /// @dev Gets the official ENS reverse registrar.\n    function getEnsReverseRegistrar() public view returns (EnsReverseRegistrar) {\n        return EnsReverseRegistrar(getEnsRegistry().owner(ADDR_REVERSE_NODE));\n    }\n\n    /**\n     *  External functions\n     */\n\n    /// @dev This function is used when the rootnode owner is updated\n    /// @param _newOwner The address of the new ENS manager that will manage the root node.\n    function changeRootnodeOwner(address _newOwner) external onlyOwner {\n        require(_newOwner != address(0), \"Address cannot be null\");\n        getEnsRegistry().setOwner(rootNode, _newOwner);\n        emit RootnodeOwnerChanged(rootNode, _newOwner);\n    }\n\n    /// @dev This function is used when the rootnode resolver is updated\n    /// @param _newResolver The address of the new ENS Resolver that will manage the root node.\n    function changeRootnodeResolver(address _newResolver) external onlyOwner {\n        require(_newResolver != address(0), \"Address cannot be null\");\n        getEnsRegistry().setResolver(rootNode, _newResolver);\n        emit RootnodeResolverChanged(rootNode, _newResolver);\n    }\n\n    /// @dev This function is used when the rootnode TTL is updated\n    /// @param _newTtl The address of the new TTL that will manage the root node.\n    function changeRootnodeTTL(uint64 _newTtl) external onlyOwner {\n        getEnsRegistry().setTTL(rootNode, _newTtl);\n        emit RootnodeTTLChanged(rootNode, _newTtl);\n    }\n\n    /// @dev Lets the owner change the address of the Authereum ENS resolver contract\n    /// @param _authereumEnsResolver The address of the Authereun ENS resolver contract\n    function changeEnsResolver(address _authereumEnsResolver) external onlyOwner {\n        require(_authereumEnsResolver != address(0), \"Address cannot be null\");\n        authereumEnsResolver = _authereumEnsResolver;\n        emit AuthereumEnsResolverChanged(_authereumEnsResolver);\n    }\n\n    /// @dev Lets the manager assign an ENS subdomain of the root node to a target address.\n    ///      Registers both the forward and reverse ENS\n    /// @param _label The subdomain label\n    /// @param _owner The owner of the subdomain\n    function register(string calldata _label, address _owner) external {\n        bytes32 labelNode = keccak256(abi.encodePacked(_label));\n        bytes32 node = keccak256(abi.encodePacked(rootNode, labelNode));\n        address currentOwner = getEnsRegistry().owner(node);\n        require(currentOwner == address(0), \"Label is already owned\");\n\n        // Forward ENS\n        getEnsRegistry().setSubnodeOwner(rootNode, labelNode, address(this));\n        getEnsRegistry().setResolver(node, authereumEnsResolver);\n        getEnsRegistry().setOwner(node, _owner);\n        AuthereumEnsResolver(authereumEnsResolver).setAddr(node, _owner);\n\n        // Reverse ENS\n        strings.slice[] memory parts = new strings.slice[](2);\n        parts[0] = _label.toSlice();\n        parts[1] = rootName.toSlice();\n        string memory name = \".\".toSlice().join(parts);\n        bytes32 reverseNode = EnsReverseRegistrar(getEnsReverseRegistrar()).node(_owner);\n        AuthereumEnsResolver(authereumEnsResolver).setName(reverseNode, name);\n\n        emit Registered(_owner, name);\n    }\n\n    /**\n     *  Public functions\n     */\n\n    /// @dev Returns true is a given subnode is available\n    /// @param _subnode The target subnode\n    /// @return true if the subnode is available\n    function isAvailable(bytes32 _subnode) public view returns (bool) {\n        bytes32 node = keccak256(abi.encodePacked(rootNode, _subnode));\n        address currentOwner = getEnsRegistry().owner(node);\n        if(currentOwner == address(0)) {\n            return true;\n        }\n        return false;\n    }\n}",
  "sourcePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSManager.sol",
  "ast": {
    "absolutePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSManager.sol",
    "exportedSymbols": {
      "AuthereumEnsManager": [
        1793
      ],
      "AuthereumEnsResolver": [
        1386
      ]
    },
    "id": 1794,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1352,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "absolutePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/ens/ENS.sol",
        "file": "./ENS.sol",
        "id": 1353,
        "nodeType": "ImportDirective",
        "scope": 1794,
        "sourceUnit": 2060,
        "src": "25:19:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/utils/strings.sol",
        "file": "../utils/strings.sol",
        "id": 1354,
        "nodeType": "ImportDirective",
        "scope": 1794,
        "sourceUnit": 4300,
        "src": "45:30:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/base/Managed.sol",
        "file": "../base/Managed.sol",
        "id": 1355,
        "nodeType": "ImportDirective",
        "scope": 1794,
        "sourceUnit": 1284,
        "src": "76:29:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1386,
        "linearizedBaseContracts": [
          1386
        ],
        "name": "AuthereumEnsResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1360,
              "nodeType": "Block",
              "src": "189:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 1361,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1357,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 1361,
                  "src": "162:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "162:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "161:18:7"
            },
            "returnParameters": {
              "id": 1359,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "189:0:7"
            },
            "scope": 1386,
            "src": "142:49:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1368,
              "nodeType": "Block",
              "src": "250:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 1369,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setAddr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1363,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1369,
                  "src": "213:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1362,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "213:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1365,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1369,
                  "src": "227:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "227:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "212:28:7"
            },
            "returnParameters": {
              "id": 1367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "250:0:7"
            },
            "scope": 1386,
            "src": "196:56:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1376,
              "nodeType": "Block",
              "src": "319:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 1377,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1374,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1371,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1377,
                  "src": "274:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1370,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "274:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1373,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1377,
                  "src": "288:20:7",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1372,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "288:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "273:36:7"
            },
            "returnParameters": {
              "id": 1375,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "319:0:7"
            },
            "scope": 1386,
            "src": "257:64:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1384,
              "nodeType": "Block",
              "src": "381:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 1385,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1379,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1385,
                  "src": "340:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1378,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "340:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "339:14:7"
            },
            "returnParameters": {
              "id": 1383,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1382,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1385,
                  "src": "372:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1381,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "371:9:7"
            },
            "scope": 1386,
            "src": "326:57:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 1794,
        "src": "107:278:7"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title AuthereumEnsManager\n@dev Used to manage all subdomains.\n@dev This is also known as the Authereum registrar.\n@dev The public ENS registry is used. The resolver is custom.",
        "fullyImplemented": true,
        "id": 1793,
        "linearizedBaseContracts": [
          1793
        ],
        "name": "AuthereumEnsManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1388,
            "libraryName": {
              "contractScope": null,
              "id": 1387,
              "name": "strings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4299,
              "src": "626:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_strings_$4299",
                "typeString": "library strings"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "620:20:7",
            "typeName": null
          },
          {
            "constant": true,
            "id": 1391,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "677:110:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 1389,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "677:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 1390,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "721:66:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1393,
            "name": "ensRegistry",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "793:19:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1392,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "793:7:7",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1395,
            "name": "rootName",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "848:22:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1394,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "848:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1397,
            "name": "rootNode",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "905:23:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 1396,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "905:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1399,
            "name": "authereumEnsResolver",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "981:35:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1398,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "981:7:7",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1405,
            "name": "RootnodeOwnerChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1401,
                  "indexed": true,
                  "name": "rootnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1405,
                  "src": "1050:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1400,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1050:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1403,
                  "indexed": true,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1405,
                  "src": "1076:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1402,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1049:52:7"
            },
            "src": "1023:79:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1411,
            "name": "RootnodeResolverChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1410,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1407,
                  "indexed": true,
                  "name": "rootnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1411,
                  "src": "1137:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1406,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1137:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1409,
                  "indexed": true,
                  "name": "newResolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1411,
                  "src": "1163:27:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1163:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1136:55:7"
            },
            "src": "1107:85:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1417,
            "name": "RootnodeTTLChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1413,
                  "indexed": true,
                  "name": "rootnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1417,
                  "src": "1222:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1412,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1222:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1415,
                  "indexed": true,
                  "name": "newTtl",
                  "nodeType": "VariableDeclaration",
                  "scope": 1417,
                  "src": "1248:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1414,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1248:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1221:49:7"
            },
            "src": "1197:74:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1421,
            "name": "AuthereumEnsResolverChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1419,
                  "indexed": true,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1421,
                  "src": "1310:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1310:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1309:22:7"
            },
            "src": "1276:56:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1427,
            "name": "Registered",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1426,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1423,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1427,
                  "src": "1354:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1354:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1425,
                  "indexed": false,
                  "name": "ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1427,
                  "src": "1377:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1424,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1377:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1353:35:7"
            },
            "src": "1337:52:7"
          },
          {
            "body": {
              "id": 1441,
              "nodeType": "Block",
              "src": "1466:101:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1434,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4915,
                              "src": "1520:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 1435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1520:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1431,
                                "name": "authereumEnsResolver",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1399,
                                "src": "1490:20:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1430,
                              "name": "Owned",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1350,
                              "src": "1484:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Owned_$1350_$",
                                "typeString": "type(contract Owned)"
                              }
                            },
                            "id": 1432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1484:27:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Owned_$1350",
                              "typeString": "contract Owned"
                            }
                          },
                          "id": 1433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isOwner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1324,
                          "src": "1484:35:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 1436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1484:47:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d757374206265206f776e6572",
                        "id": 1437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1533:15:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7f2c1603be0767a3b8380ba7059b1e3e54963b0fd47a1d00b714ccb2196fb1ce",
                          "typeString": "literal_string \"Must be owner\""
                        },
                        "value": "Must be owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7f2c1603be0767a3b8380ba7059b1e3e54963b0fd47a1d00b714ccb2196fb1ce",
                          "typeString": "literal_string \"Must be owner\""
                        }
                      ],
                      "id": 1429,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "1476:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1476:73:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1439,
                  "nodeType": "ExpressionStatement",
                  "src": "1476:73:7"
                },
                {
                  "id": 1440,
                  "nodeType": "PlaceholderStatement",
                  "src": "1559:1:7"
                }
              ]
            },
            "documentation": "@dev Throws if the sender is not the owner.",
            "id": 1442,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1428,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1466:0:7"
            },
            "src": "1447:120:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1469,
              "nodeType": "Block",
              "src": "2089:157:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1453,
                      "name": "rootName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1395,
                      "src": "2099:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1454,
                      "name": "_rootName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1444,
                      "src": "2110:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2099:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1456,
                  "nodeType": "ExpressionStatement",
                  "src": "2099:20:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1457,
                      "name": "rootNode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1397,
                      "src": "2129:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1458,
                      "name": "_rootNode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1446,
                      "src": "2140:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2129:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1460,
                  "nodeType": "ExpressionStatement",
                  "src": "2129:20:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1461,
                      "name": "ensRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1393,
                      "src": "2159:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1462,
                      "name": "_ensRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1448,
                      "src": "2173:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2159:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1464,
                  "nodeType": "ExpressionStatement",
                  "src": "2159:26:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1465,
                      "name": "authereumEnsResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1399,
                      "src": "2195:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1466,
                      "name": "_authereumEnsResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1450,
                      "src": "2218:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2195:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1468,
                  "nodeType": "ExpressionStatement",
                  "src": "2195:44:7"
                }
              ]
            },
            "documentation": "@dev Constructor that sets the ENS root name and root node to manage\n @param _rootName The root name (e.g. authereum.eth)\n @param _rootNode The node of the root name (e.g. namehash(authereum.eth))\n @param _ensRegistry Custom ENS Registry address\n @param _authereumEnsResolver Custom Autheruem ENS Resolver address",
            "id": 1470,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1451,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1444,
                  "name": "_rootName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1470,
                  "src": "1944:23:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1443,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1944:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1446,
                  "name": "_rootNode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1470,
                  "src": "1977:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1445,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1977:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1448,
                  "name": "_ensRegistry",
                  "nodeType": "VariableDeclaration",
                  "scope": 1470,
                  "src": "2004:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2004:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1450,
                  "name": "_authereumEnsResolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1470,
                  "src": "2034:29:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1449,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2034:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1934:135:7"
            },
            "returnParameters": {
              "id": 1452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2089:0:7"
            },
            "scope": 1793,
            "src": "1923:323:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1492,
              "nodeType": "Block",
              "src": "2412:127:7",
              "statements": [
                {
                  "assignments": [
                    1478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1478,
                      "name": "resolver",
                      "nodeType": "VariableDeclaration",
                      "scope": 1492,
                      "src": "2422:16:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1477,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2422:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1484,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1482,
                        "name": "_node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1472,
                        "src": "2467:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1479,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "2441:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1480,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2441:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1481,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "resolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1961,
                      "src": "2441:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 1483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2441:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2422:51:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1489,
                        "name": "_node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1472,
                        "src": "2526:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1486,
                            "name": "resolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1478,
                            "src": "2511:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1485,
                          "name": "AuthereumEnsResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1386,
                          "src": "2490:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_AuthereumEnsResolver_$1386_$",
                            "typeString": "type(contract AuthereumEnsResolver)"
                          }
                        },
                        "id": 1487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2490:30:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AuthereumEnsResolver_$1386",
                          "typeString": "contract AuthereumEnsResolver"
                        }
                      },
                      "id": 1488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1385,
                      "src": "2490:35:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) external returns (address)"
                      }
                    },
                    "id": 1490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2490:42:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1476,
                  "id": 1491,
                  "nodeType": "Return",
                  "src": "2483:49:7"
                }
              ]
            },
            "documentation": "@dev Resolves an ENS name to an address.\n @param _node The namehash of the ENS name.",
            "id": 1493,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resolveEns",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1472,
                  "name": "_node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1493,
                  "src": "2372:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1471,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2372:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2371:15:7"
            },
            "returnParameters": {
              "id": 1476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1475,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1493,
                  "src": "2403:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1474,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2403:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2402:9:7"
            },
            "scope": 1793,
            "src": "2352:187:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1502,
              "nodeType": "Block",
              "src": "2650:48:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1499,
                        "name": "ensRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1393,
                        "src": "2679:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1498,
                      "name": "EnsRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1999,
                      "src": "2667:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EnsRegistry_$1999_$",
                        "typeString": "type(contract EnsRegistry)"
                      }
                    },
                    "id": 1500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2667:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                      "typeString": "contract EnsRegistry"
                    }
                  },
                  "functionReturnParameters": 1497,
                  "id": 1501,
                  "nodeType": "Return",
                  "src": "2660:31:7"
                }
              ]
            },
            "documentation": "@dev Gets the official ENS registry.",
            "id": 1503,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEnsRegistry",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1494,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2613:2:7"
            },
            "returnParameters": {
              "id": 1497,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1496,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1503,
                  "src": "2637:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                    "typeString": "contract EnsRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1495,
                    "name": "EnsRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1999,
                    "src": "2637:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                      "typeString": "contract EnsRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2636:13:7"
            },
            "scope": 1793,
            "src": "2590:108:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1516,
              "nodeType": "Block",
              "src": "2834:86:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1512,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1391,
                            "src": "2894:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1509,
                              "name": "getEnsRegistry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "2871:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                                "typeString": "function () view returns (contract EnsRegistry)"
                              }
                            },
                            "id": 1510,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2871:16:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                              "typeString": "contract EnsRegistry"
                            }
                          },
                          "id": 1511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1954,
                          "src": "2871:22:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 1513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2871:41:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1508,
                      "name": "EnsReverseRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2059,
                      "src": "2851:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EnsReverseRegistrar_$2059_$",
                        "typeString": "type(contract EnsReverseRegistrar)"
                      }
                    },
                    "id": 1514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2851:62:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                      "typeString": "contract EnsReverseRegistrar"
                    }
                  },
                  "functionReturnParameters": 1507,
                  "id": 1515,
                  "nodeType": "Return",
                  "src": "2844:69:7"
                }
              ]
            },
            "documentation": "@dev Gets the official ENS reverse registrar.",
            "id": 1517,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEnsReverseRegistrar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1504,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2789:2:7"
            },
            "returnParameters": {
              "id": 1507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1506,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1517,
                  "src": "2813:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                    "typeString": "contract EnsReverseRegistrar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1505,
                    "name": "EnsReverseRegistrar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2059,
                    "src": "2813:19:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                      "typeString": "contract EnsReverseRegistrar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2812:21:7"
            },
            "scope": 1793,
            "src": "2758:162:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1545,
              "nodeType": "Block",
              "src": "3199:187:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1525,
                          "name": "_newOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1519,
                          "src": "3217:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1527,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3238:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3230:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3230:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3217:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416464726573732063616e6e6f74206265206e756c6c",
                        "id": 1530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3242:24:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        },
                        "value": "Address cannot be null"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        }
                      ],
                      "id": 1524,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "3209:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3209:58:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1532,
                  "nodeType": "ExpressionStatement",
                  "src": "3209:58:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1536,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "3303:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1537,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1519,
                        "src": "3313:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1533,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "3277:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3277:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1975,
                      "src": "3277:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3277:46:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1539,
                  "nodeType": "ExpressionStatement",
                  "src": "3277:46:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1541,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "3359:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1542,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1519,
                        "src": "3369:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1540,
                      "name": "RootnodeOwnerChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1405,
                      "src": "3338:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 1543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3338:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1544,
                  "nodeType": "EmitStatement",
                  "src": "3333:46:7"
                }
              ]
            },
            "documentation": "@dev This function is used when the rootnode owner is updated\n @param _newOwner The address of the new ENS manager that will manage the root node.",
            "id": 1546,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1522,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1521,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1442,
                  "src": "3189:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3189:9:7"
              }
            ],
            "name": "changeRootnodeOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1519,
                  "name": "_newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1546,
                  "src": "3161:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1518,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3161:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3160:19:7"
            },
            "returnParameters": {
              "id": 1523,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3199:0:7"
            },
            "scope": 1793,
            "src": "3132:254:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1574,
              "nodeType": "Block",
              "src": "3634:202:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1554,
                          "name": "_newResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1548,
                          "src": "3652:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1556,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3676:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1555,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3668:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3668:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3652:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416464726573732063616e6e6f74206265206e756c6c",
                        "id": 1559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3680:24:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        },
                        "value": "Address cannot be null"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        }
                      ],
                      "id": 1553,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "3644:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1560,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3644:61:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1561,
                  "nodeType": "ExpressionStatement",
                  "src": "3644:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1565,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "3744:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1566,
                        "name": "_newResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1548,
                        "src": "3754:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1562,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "3715:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3715:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1564,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1991,
                      "src": "3715:28:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1567,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3715:52:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1568,
                  "nodeType": "ExpressionStatement",
                  "src": "3715:52:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1570,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "3806:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1571,
                        "name": "_newResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1548,
                        "src": "3816:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1569,
                      "name": "RootnodeResolverChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1411,
                      "src": "3782:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 1572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3782:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1573,
                  "nodeType": "EmitStatement",
                  "src": "3777:52:7"
                }
              ]
            },
            "documentation": "@dev This function is used when the rootnode resolver is updated\n @param _newResolver The address of the new ENS Resolver that will manage the root node.",
            "id": 1575,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1551,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1550,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1442,
                  "src": "3624:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3624:9:7"
              }
            ],
            "name": "changeRootnodeResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1548,
                  "name": "_newResolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1575,
                  "src": "3593:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1547,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3593:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3592:22:7"
            },
            "returnParameters": {
              "id": 1552,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3634:0:7"
            },
            "scope": 1793,
            "src": "3561:275:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1594,
              "nodeType": "Block",
              "src": "4054:111:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1585,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "4088:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1586,
                        "name": "_newTtl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1577,
                        "src": "4098:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1582,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "4064:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4064:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setTTL",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1998,
                      "src": "4064:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64) external"
                      }
                    },
                    "id": 1587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4064:42:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1588,
                  "nodeType": "ExpressionStatement",
                  "src": "4064:42:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1590,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "4140:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1591,
                        "name": "_newTtl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1577,
                        "src": "4150:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1589,
                      "name": "RootnodeTTLChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1417,
                      "src": "4121:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64)"
                      }
                    },
                    "id": 1592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4121:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1593,
                  "nodeType": "EmitStatement",
                  "src": "4116:42:7"
                }
              ]
            },
            "documentation": "@dev This function is used when the rootnode TTL is updated\n @param _newTtl The address of the new TTL that will manage the root node.",
            "id": 1595,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1580,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1579,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1442,
                  "src": "4044:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4044:9:7"
              }
            ],
            "name": "changeRootnodeTTL",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1577,
                  "name": "_newTtl",
                  "nodeType": "VariableDeclaration",
                  "scope": 1595,
                  "src": "4019:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1576,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4019:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4018:16:7"
            },
            "returnParameters": {
              "id": 1581,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4054:0:7"
            },
            "scope": 1793,
            "src": "3992:173:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1619,
              "nodeType": "Block",
              "src": "4422:206:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1607,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1603,
                          "name": "_authereumEnsResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1597,
                          "src": "4440:21:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1605,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4473:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1604,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4465:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4465:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "4440:35:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416464726573732063616e6e6f74206265206e756c6c",
                        "id": 1608,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4477:24:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        },
                        "value": "Address cannot be null"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        }
                      ],
                      "id": 1602,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "4432:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4432:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1610,
                  "nodeType": "ExpressionStatement",
                  "src": "4432:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1611,
                      "name": "authereumEnsResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1399,
                      "src": "4512:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1612,
                      "name": "_authereumEnsResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1597,
                      "src": "4535:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4512:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1614,
                  "nodeType": "ExpressionStatement",
                  "src": "4512:44:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1616,
                        "name": "_authereumEnsResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1597,
                        "src": "4599:21:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1615,
                      "name": "AuthereumEnsResolverChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1421,
                      "src": "4571:27:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4571:50:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1618,
                  "nodeType": "EmitStatement",
                  "src": "4566:55:7"
                }
              ]
            },
            "documentation": "@dev Lets the owner change the address of the Authereum ENS resolver contract\n @param _authereumEnsResolver The address of the Authereun ENS resolver contract",
            "id": 1620,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1600,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1599,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1442,
                  "src": "4412:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4412:9:7"
              }
            ],
            "name": "changeEnsResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1598,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1597,
                  "name": "_authereumEnsResolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1620,
                  "src": "4372:29:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4372:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4371:31:7"
            },
            "returnParameters": {
              "id": 1601,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4422:0:7"
            },
            "scope": 1793,
            "src": "4345:283:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1754,
              "nodeType": "Block",
              "src": "4940:996:7",
              "statements": [
                {
                  "assignments": [
                    1628
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1628,
                      "name": "labelNode",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "4950:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1627,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4950:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1635,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1632,
                            "name": "_label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1622,
                            "src": "4997:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1630,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4902,
                            "src": "4980:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4980:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1633,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4980:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1629,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4909,
                      "src": "4970:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4970:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4950:55:7"
                },
                {
                  "assignments": [
                    1637
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1637,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5015:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1636,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5015:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1645,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1641,
                            "name": "rootNode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1397,
                            "src": "5057:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1642,
                            "name": "labelNode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1628,
                            "src": "5067:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1639,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4902,
                            "src": "5040:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1640,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5040:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5040:37:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1638,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4909,
                      "src": "5030:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5030:48:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5015:63:7"
                },
                {
                  "assignments": [
                    1647
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1647,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5088:20:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1646,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5088:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1653,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1651,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1637,
                        "src": "5134:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1648,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "5111:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5111:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1954,
                      "src": "5111:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 1652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5111:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5088:51:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1659,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1655,
                          "name": "currentOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1647,
                          "src": "5157:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1657,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5181:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5173:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5173:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5157:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4c6162656c20697320616c7265616479206f776e6564",
                        "id": 1660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5185:24:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_504774700d415feeadf416b4f24c9534da6feefff03dee0b1faa2a64c86dd456",
                          "typeString": "literal_string \"Label is already owned\""
                        },
                        "value": "Label is already owned"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_504774700d415feeadf416b4f24c9534da6feefff03dee0b1faa2a64c86dd456",
                          "typeString": "literal_string \"Label is already owned\""
                        }
                      ],
                      "id": 1654,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "5149:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5149:61:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1662,
                  "nodeType": "ExpressionStatement",
                  "src": "5149:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1666,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "5277:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1667,
                        "name": "labelNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1628,
                        "src": "5287:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1669,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4967,
                            "src": "5306:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AuthereumEnsManager_$1793",
                              "typeString": "contract AuthereumEnsManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AuthereumEnsManager_$1793",
                              "typeString": "contract AuthereumEnsManager"
                            }
                          ],
                          "id": 1668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5298:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5298:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1663,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "5244:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5244:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setSubnodeOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1984,
                      "src": "5244:32:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address) external"
                      }
                    },
                    "id": 1671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5244:68:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1672,
                  "nodeType": "ExpressionStatement",
                  "src": "5244:68:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1676,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1637,
                        "src": "5351:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1677,
                        "name": "authereumEnsResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1399,
                        "src": "5357:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1673,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "5322:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5322:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1991,
                      "src": "5322:28:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5322:56:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1679,
                  "nodeType": "ExpressionStatement",
                  "src": "5322:56:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1683,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1637,
                        "src": "5414:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1684,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "5420:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1680,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "5388:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5388:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1682,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1975,
                      "src": "5388:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5388:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1686,
                  "nodeType": "ExpressionStatement",
                  "src": "5388:39:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1691,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1637,
                        "src": "5488:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1692,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "5494:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1688,
                            "name": "authereumEnsResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1399,
                            "src": "5458:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1687,
                          "name": "AuthereumEnsResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1386,
                          "src": "5437:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_AuthereumEnsResolver_$1386_$",
                            "typeString": "type(contract AuthereumEnsResolver)"
                          }
                        },
                        "id": 1689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5437:42:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AuthereumEnsResolver_$1386",
                          "typeString": "contract AuthereumEnsResolver"
                        }
                      },
                      "id": 1690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setAddr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1369,
                      "src": "5437:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5437:64:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1694,
                  "nodeType": "ExpressionStatement",
                  "src": "5437:64:7"
                },
                {
                  "assignments": [
                    1699
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1699,
                      "name": "parts",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5535:28:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                        "typeString": "struct strings.slice[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1697,
                          "name": "strings.slice",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2601,
                          "src": "5535:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$2601_storage_ptr",
                            "typeString": "struct strings.slice"
                          }
                        },
                        "id": 1698,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5535:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_storage_$dyn_storage_ptr",
                          "typeString": "struct strings.slice[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1705,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 1703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5586:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 1702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5566:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_slice_$2601_memory_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (struct strings.slice memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1700,
                          "name": "strings.slice",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2601,
                          "src": "5570:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$2601_storage_ptr",
                            "typeString": "struct strings.slice"
                          }
                        },
                        "id": 1701,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5570:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_storage_$dyn_storage_ptr",
                          "typeString": "struct strings.slice[]"
                        }
                      }
                    },
                    "id": 1704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5566:22:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory",
                      "typeString": "struct strings.slice memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5535:53:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1706,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1699,
                        "src": "5598:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 1708,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5604:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5598:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$2601_memory",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1709,
                          "name": "_label",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1622,
                          "src": "5609:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "id": 1710,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toSlice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2661,
                        "src": "5609:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2601_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                          "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                        }
                      },
                      "id": 1711,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5609:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$2601_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "src": "5598:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$2601_memory",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 1713,
                  "nodeType": "ExpressionStatement",
                  "src": "5598:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1714,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1699,
                        "src": "5635:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 1716,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5641:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5635:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$2601_memory",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1717,
                          "name": "rootName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1395,
                          "src": "5646:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toSlice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2661,
                        "src": "5646:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2601_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                          "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                        }
                      },
                      "id": 1719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5646:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$2601_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "src": "5635:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$2601_memory",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 1721,
                  "nodeType": "ExpressionStatement",
                  "src": "5635:29:7"
                },
                {
                  "assignments": [
                    1723
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1723,
                      "name": "name",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5674:18:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1722,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5674:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1730,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1728,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1699,
                        "src": "5714:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "2e",
                            "id": 1724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5695:3:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
                              "typeString": "literal_string \".\""
                            },
                            "value": "."
                          },
                          "id": 1725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toSlice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2661,
                          "src": "5695:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2601_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                          }
                        },
                        "id": 1726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5695:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$2601_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1727,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "join",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4298,
                      "src": "5695:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$2601_memory_ptr_$_t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$2601_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory[] memory) pure returns (string memory)"
                      }
                    },
                    "id": 1729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5695:25:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5674:46:7"
                },
                {
                  "assignments": [
                    1732
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1732,
                      "name": "reverseNode",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5730:19:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1731,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5730:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1740,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1738,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "5803:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1734,
                              "name": "getEnsReverseRegistrar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1517,
                              "src": "5772:22:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsReverseRegistrar_$2059_$",
                                "typeString": "function () view returns (contract EnsReverseRegistrar)"
                              }
                            },
                            "id": 1735,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5772:24:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                              "typeString": "contract EnsReverseRegistrar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                              "typeString": "contract EnsReverseRegistrar"
                            }
                          ],
                          "id": 1733,
                          "name": "EnsReverseRegistrar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2059,
                          "src": "5752:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_EnsReverseRegistrar_$2059_$",
                            "typeString": "type(contract EnsReverseRegistrar)"
                          }
                        },
                        "id": 1736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5752:45:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                          "typeString": "contract EnsReverseRegistrar"
                        }
                      },
                      "id": 1737,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "node",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "5752:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) external returns (bytes32)"
                      }
                    },
                    "id": 1739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5752:58:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5730:80:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1745,
                        "name": "reverseNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1732,
                        "src": "5871:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1746,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1723,
                        "src": "5884:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1742,
                            "name": "authereumEnsResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1399,
                            "src": "5841:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1741,
                          "name": "AuthereumEnsResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1386,
                          "src": "5820:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_AuthereumEnsResolver_$1386_$",
                            "typeString": "type(contract AuthereumEnsResolver)"
                          }
                        },
                        "id": 1743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5820:42:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AuthereumEnsResolver_$1386",
                          "typeString": "contract AuthereumEnsResolver"
                        }
                      },
                      "id": 1744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1377,
                      "src": "5820:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 1747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5820:69:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1748,
                  "nodeType": "ExpressionStatement",
                  "src": "5820:69:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1750,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "5916:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1751,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1723,
                        "src": "5924:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1749,
                      "name": "Registered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1427,
                      "src": "5905:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 1752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5905:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1753,
                  "nodeType": "EmitStatement",
                  "src": "5900:29:7"
                }
              ]
            },
            "documentation": "@dev Lets the manager assign an ENS subdomain of the root node to a target address.\n      Registers both the forward and reverse ENS\n @param _label The subdomain label\n @param _owner The owner of the subdomain",
            "id": 1755,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "register",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1625,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1622,
                  "name": "_label",
                  "nodeType": "VariableDeclaration",
                  "scope": 1755,
                  "src": "4891:22:7",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1621,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4891:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1624,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1755,
                  "src": "4915:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4915:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4890:40:7"
            },
            "returnParameters": {
              "id": 1626,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4940:0:7"
            },
            "scope": 1793,
            "src": "4873:1063:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1791,
              "nodeType": "Block",
              "src": "6200:238:7",
              "statements": [
                {
                  "assignments": [
                    1763
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1763,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 1791,
                      "src": "6210:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1762,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6210:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1771,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1767,
                            "name": "rootNode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1397,
                            "src": "6252:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1768,
                            "name": "_subnode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1757,
                            "src": "6262:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1765,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4902,
                            "src": "6235:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6235:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6235:36:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1764,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4909,
                      "src": "6225:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6225:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6210:62:7"
                },
                {
                  "assignments": [
                    1773
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1773,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1791,
                      "src": "6282:20:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1772,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6282:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1779,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1777,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1763,
                        "src": "6328:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1774,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "6305:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6305:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1776,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1954,
                      "src": "6305:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 1778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6305:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6282:51:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1780,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1773,
                      "src": "6346:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6370:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1781,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6362:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6362:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6346:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1788,
                  "nodeType": "IfStatement",
                  "src": "6343:67:7",
                  "trueBody": {
                    "id": 1787,
                    "nodeType": "Block",
                    "src": "6374:36:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6395:4:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1761,
                        "id": 1786,
                        "nodeType": "Return",
                        "src": "6388:11:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 1789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6426:5:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1761,
                  "id": 1790,
                  "nodeType": "Return",
                  "src": "6419:12:7"
                }
              ]
            },
            "documentation": "@dev Returns true is a given subnode is available\n @param _subnode The target subnode\n @return true if the subnode is available",
            "id": 1792,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAvailable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1758,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1757,
                  "name": "_subnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1792,
                  "src": "6155:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1756,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6155:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6154:18:7"
            },
            "returnParameters": {
              "id": 1761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1760,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1792,
                  "src": "6194:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1759,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6194:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6193:6:7"
            },
            "scope": 1793,
            "src": "6134:304:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1794,
        "src": "585:5855:7"
      }
    ],
    "src": "0:6440:7"
  },
  "legacyAST": {
    "absolutePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSManager.sol",
    "exportedSymbols": {
      "AuthereumEnsManager": [
        1793
      ],
      "AuthereumEnsResolver": [
        1386
      ]
    },
    "id": 1794,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1352,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "absolutePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/ens/ENS.sol",
        "file": "./ENS.sol",
        "id": 1353,
        "nodeType": "ImportDirective",
        "scope": 1794,
        "sourceUnit": 2060,
        "src": "25:19:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/utils/strings.sol",
        "file": "../utils/strings.sol",
        "id": 1354,
        "nodeType": "ImportDirective",
        "scope": 1794,
        "sourceUnit": 4300,
        "src": "45:30:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/authereumorg/authereum/monorepo/packages/contracts/contracts/base/Managed.sol",
        "file": "../base/Managed.sol",
        "id": 1355,
        "nodeType": "ImportDirective",
        "scope": 1794,
        "sourceUnit": 1284,
        "src": "76:29:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1386,
        "linearizedBaseContracts": [
          1386
        ],
        "name": "AuthereumEnsResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1360,
              "nodeType": "Block",
              "src": "189:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 1361,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1357,
                  "name": "_manager",
                  "nodeType": "VariableDeclaration",
                  "scope": 1361,
                  "src": "162:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "162:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "161:18:7"
            },
            "returnParameters": {
              "id": 1359,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "189:0:7"
            },
            "scope": 1386,
            "src": "142:49:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1368,
              "nodeType": "Block",
              "src": "250:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 1369,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setAddr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1363,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1369,
                  "src": "213:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1362,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "213:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1365,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1369,
                  "src": "227:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "227:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "212:28:7"
            },
            "returnParameters": {
              "id": 1367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "250:0:7"
            },
            "scope": 1386,
            "src": "196:56:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1376,
              "nodeType": "Block",
              "src": "319:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 1377,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1374,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1371,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1377,
                  "src": "274:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1370,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "274:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1373,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1377,
                  "src": "288:20:7",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1372,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "288:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "273:36:7"
            },
            "returnParameters": {
              "id": 1375,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "319:0:7"
            },
            "scope": 1386,
            "src": "257:64:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1384,
              "nodeType": "Block",
              "src": "381:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 1385,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1379,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1385,
                  "src": "340:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1378,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "340:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "339:14:7"
            },
            "returnParameters": {
              "id": 1383,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1382,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1385,
                  "src": "372:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1381,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "371:9:7"
            },
            "scope": 1386,
            "src": "326:57:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 1794,
        "src": "107:278:7"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title AuthereumEnsManager\n@dev Used to manage all subdomains.\n@dev This is also known as the Authereum registrar.\n@dev The public ENS registry is used. The resolver is custom.",
        "fullyImplemented": true,
        "id": 1793,
        "linearizedBaseContracts": [
          1793
        ],
        "name": "AuthereumEnsManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1388,
            "libraryName": {
              "contractScope": null,
              "id": 1387,
              "name": "strings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4299,
              "src": "626:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_strings_$4299",
                "typeString": "library strings"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "620:20:7",
            "typeName": null
          },
          {
            "constant": true,
            "id": 1391,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "677:110:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 1389,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "677:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 1390,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "721:66:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1393,
            "name": "ensRegistry",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "793:19:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1392,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "793:7:7",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1395,
            "name": "rootName",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "848:22:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1394,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "848:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1397,
            "name": "rootNode",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "905:23:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 1396,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "905:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1399,
            "name": "authereumEnsResolver",
            "nodeType": "VariableDeclaration",
            "scope": 1793,
            "src": "981:35:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1398,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "981:7:7",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1405,
            "name": "RootnodeOwnerChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1401,
                  "indexed": true,
                  "name": "rootnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1405,
                  "src": "1050:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1400,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1050:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1403,
                  "indexed": true,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1405,
                  "src": "1076:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1402,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1049:52:7"
            },
            "src": "1023:79:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1411,
            "name": "RootnodeResolverChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1410,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1407,
                  "indexed": true,
                  "name": "rootnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1411,
                  "src": "1137:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1406,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1137:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1409,
                  "indexed": true,
                  "name": "newResolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1411,
                  "src": "1163:27:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1163:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1136:55:7"
            },
            "src": "1107:85:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1417,
            "name": "RootnodeTTLChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1413,
                  "indexed": true,
                  "name": "rootnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1417,
                  "src": "1222:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1412,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1222:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1415,
                  "indexed": true,
                  "name": "newTtl",
                  "nodeType": "VariableDeclaration",
                  "scope": 1417,
                  "src": "1248:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1414,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1248:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1221:49:7"
            },
            "src": "1197:74:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1421,
            "name": "AuthereumEnsResolverChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1419,
                  "indexed": true,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1421,
                  "src": "1310:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1310:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1309:22:7"
            },
            "src": "1276:56:7"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1427,
            "name": "Registered",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1426,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1423,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1427,
                  "src": "1354:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1354:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1425,
                  "indexed": false,
                  "name": "ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1427,
                  "src": "1377:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1424,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1377:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1353:35:7"
            },
            "src": "1337:52:7"
          },
          {
            "body": {
              "id": 1441,
              "nodeType": "Block",
              "src": "1466:101:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1434,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4915,
                              "src": "1520:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 1435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1520:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1431,
                                "name": "authereumEnsResolver",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1399,
                                "src": "1490:20:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1430,
                              "name": "Owned",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1350,
                              "src": "1484:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Owned_$1350_$",
                                "typeString": "type(contract Owned)"
                              }
                            },
                            "id": 1432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1484:27:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Owned_$1350",
                              "typeString": "contract Owned"
                            }
                          },
                          "id": 1433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isOwner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1324,
                          "src": "1484:35:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 1436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1484:47:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d757374206265206f776e6572",
                        "id": 1437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1533:15:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7f2c1603be0767a3b8380ba7059b1e3e54963b0fd47a1d00b714ccb2196fb1ce",
                          "typeString": "literal_string \"Must be owner\""
                        },
                        "value": "Must be owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7f2c1603be0767a3b8380ba7059b1e3e54963b0fd47a1d00b714ccb2196fb1ce",
                          "typeString": "literal_string \"Must be owner\""
                        }
                      ],
                      "id": 1429,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "1476:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1476:73:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1439,
                  "nodeType": "ExpressionStatement",
                  "src": "1476:73:7"
                },
                {
                  "id": 1440,
                  "nodeType": "PlaceholderStatement",
                  "src": "1559:1:7"
                }
              ]
            },
            "documentation": "@dev Throws if the sender is not the owner.",
            "id": 1442,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1428,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1466:0:7"
            },
            "src": "1447:120:7",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1469,
              "nodeType": "Block",
              "src": "2089:157:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1453,
                      "name": "rootName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1395,
                      "src": "2099:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1454,
                      "name": "_rootName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1444,
                      "src": "2110:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2099:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1456,
                  "nodeType": "ExpressionStatement",
                  "src": "2099:20:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1457,
                      "name": "rootNode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1397,
                      "src": "2129:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1458,
                      "name": "_rootNode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1446,
                      "src": "2140:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2129:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1460,
                  "nodeType": "ExpressionStatement",
                  "src": "2129:20:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1461,
                      "name": "ensRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1393,
                      "src": "2159:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1462,
                      "name": "_ensRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1448,
                      "src": "2173:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2159:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1464,
                  "nodeType": "ExpressionStatement",
                  "src": "2159:26:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1465,
                      "name": "authereumEnsResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1399,
                      "src": "2195:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1466,
                      "name": "_authereumEnsResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1450,
                      "src": "2218:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2195:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1468,
                  "nodeType": "ExpressionStatement",
                  "src": "2195:44:7"
                }
              ]
            },
            "documentation": "@dev Constructor that sets the ENS root name and root node to manage\n @param _rootName The root name (e.g. authereum.eth)\n @param _rootNode The node of the root name (e.g. namehash(authereum.eth))\n @param _ensRegistry Custom ENS Registry address\n @param _authereumEnsResolver Custom Autheruem ENS Resolver address",
            "id": 1470,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1451,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1444,
                  "name": "_rootName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1470,
                  "src": "1944:23:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1443,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1944:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1446,
                  "name": "_rootNode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1470,
                  "src": "1977:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1445,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1977:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1448,
                  "name": "_ensRegistry",
                  "nodeType": "VariableDeclaration",
                  "scope": 1470,
                  "src": "2004:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2004:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1450,
                  "name": "_authereumEnsResolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1470,
                  "src": "2034:29:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1449,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2034:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1934:135:7"
            },
            "returnParameters": {
              "id": 1452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2089:0:7"
            },
            "scope": 1793,
            "src": "1923:323:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1492,
              "nodeType": "Block",
              "src": "2412:127:7",
              "statements": [
                {
                  "assignments": [
                    1478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1478,
                      "name": "resolver",
                      "nodeType": "VariableDeclaration",
                      "scope": 1492,
                      "src": "2422:16:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1477,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2422:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1484,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1482,
                        "name": "_node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1472,
                        "src": "2467:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1479,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "2441:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1480,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2441:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1481,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "resolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1961,
                      "src": "2441:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 1483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2441:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2422:51:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1489,
                        "name": "_node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1472,
                        "src": "2526:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1486,
                            "name": "resolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1478,
                            "src": "2511:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1485,
                          "name": "AuthereumEnsResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1386,
                          "src": "2490:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_AuthereumEnsResolver_$1386_$",
                            "typeString": "type(contract AuthereumEnsResolver)"
                          }
                        },
                        "id": 1487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2490:30:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AuthereumEnsResolver_$1386",
                          "typeString": "contract AuthereumEnsResolver"
                        }
                      },
                      "id": 1488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1385,
                      "src": "2490:35:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) external returns (address)"
                      }
                    },
                    "id": 1490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2490:42:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1476,
                  "id": 1491,
                  "nodeType": "Return",
                  "src": "2483:49:7"
                }
              ]
            },
            "documentation": "@dev Resolves an ENS name to an address.\n @param _node The namehash of the ENS name.",
            "id": 1493,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "resolveEns",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1472,
                  "name": "_node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1493,
                  "src": "2372:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1471,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2372:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2371:15:7"
            },
            "returnParameters": {
              "id": 1476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1475,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1493,
                  "src": "2403:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1474,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2403:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2402:9:7"
            },
            "scope": 1793,
            "src": "2352:187:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1502,
              "nodeType": "Block",
              "src": "2650:48:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1499,
                        "name": "ensRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1393,
                        "src": "2679:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1498,
                      "name": "EnsRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1999,
                      "src": "2667:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EnsRegistry_$1999_$",
                        "typeString": "type(contract EnsRegistry)"
                      }
                    },
                    "id": 1500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2667:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                      "typeString": "contract EnsRegistry"
                    }
                  },
                  "functionReturnParameters": 1497,
                  "id": 1501,
                  "nodeType": "Return",
                  "src": "2660:31:7"
                }
              ]
            },
            "documentation": "@dev Gets the official ENS registry.",
            "id": 1503,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEnsRegistry",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1494,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2613:2:7"
            },
            "returnParameters": {
              "id": 1497,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1496,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1503,
                  "src": "2637:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                    "typeString": "contract EnsRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1495,
                    "name": "EnsRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1999,
                    "src": "2637:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                      "typeString": "contract EnsRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2636:13:7"
            },
            "scope": 1793,
            "src": "2590:108:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1516,
              "nodeType": "Block",
              "src": "2834:86:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1512,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1391,
                            "src": "2894:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1509,
                              "name": "getEnsRegistry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1503,
                              "src": "2871:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                                "typeString": "function () view returns (contract EnsRegistry)"
                              }
                            },
                            "id": 1510,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2871:16:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                              "typeString": "contract EnsRegistry"
                            }
                          },
                          "id": 1511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1954,
                          "src": "2871:22:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 1513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2871:41:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1508,
                      "name": "EnsReverseRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2059,
                      "src": "2851:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EnsReverseRegistrar_$2059_$",
                        "typeString": "type(contract EnsReverseRegistrar)"
                      }
                    },
                    "id": 1514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2851:62:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                      "typeString": "contract EnsReverseRegistrar"
                    }
                  },
                  "functionReturnParameters": 1507,
                  "id": 1515,
                  "nodeType": "Return",
                  "src": "2844:69:7"
                }
              ]
            },
            "documentation": "@dev Gets the official ENS reverse registrar.",
            "id": 1517,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEnsReverseRegistrar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1504,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2789:2:7"
            },
            "returnParameters": {
              "id": 1507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1506,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1517,
                  "src": "2813:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                    "typeString": "contract EnsReverseRegistrar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1505,
                    "name": "EnsReverseRegistrar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2059,
                    "src": "2813:19:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                      "typeString": "contract EnsReverseRegistrar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2812:21:7"
            },
            "scope": 1793,
            "src": "2758:162:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1545,
              "nodeType": "Block",
              "src": "3199:187:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1525,
                          "name": "_newOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1519,
                          "src": "3217:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1527,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3238:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3230:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3230:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3217:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416464726573732063616e6e6f74206265206e756c6c",
                        "id": 1530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3242:24:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        },
                        "value": "Address cannot be null"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        }
                      ],
                      "id": 1524,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "3209:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3209:58:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1532,
                  "nodeType": "ExpressionStatement",
                  "src": "3209:58:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1536,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "3303:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1537,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1519,
                        "src": "3313:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1533,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "3277:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3277:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1975,
                      "src": "3277:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3277:46:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1539,
                  "nodeType": "ExpressionStatement",
                  "src": "3277:46:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1541,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "3359:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1542,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1519,
                        "src": "3369:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1540,
                      "name": "RootnodeOwnerChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1405,
                      "src": "3338:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 1543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3338:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1544,
                  "nodeType": "EmitStatement",
                  "src": "3333:46:7"
                }
              ]
            },
            "documentation": "@dev This function is used when the rootnode owner is updated\n @param _newOwner The address of the new ENS manager that will manage the root node.",
            "id": 1546,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1522,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1521,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1442,
                  "src": "3189:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3189:9:7"
              }
            ],
            "name": "changeRootnodeOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1519,
                  "name": "_newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1546,
                  "src": "3161:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1518,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3161:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3160:19:7"
            },
            "returnParameters": {
              "id": 1523,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3199:0:7"
            },
            "scope": 1793,
            "src": "3132:254:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1574,
              "nodeType": "Block",
              "src": "3634:202:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1554,
                          "name": "_newResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1548,
                          "src": "3652:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1556,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3676:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1555,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3668:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3668:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3652:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416464726573732063616e6e6f74206265206e756c6c",
                        "id": 1559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3680:24:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        },
                        "value": "Address cannot be null"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        }
                      ],
                      "id": 1553,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "3644:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1560,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3644:61:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1561,
                  "nodeType": "ExpressionStatement",
                  "src": "3644:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1565,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "3744:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1566,
                        "name": "_newResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1548,
                        "src": "3754:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1562,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "3715:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3715:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1564,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1991,
                      "src": "3715:28:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1567,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3715:52:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1568,
                  "nodeType": "ExpressionStatement",
                  "src": "3715:52:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1570,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "3806:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1571,
                        "name": "_newResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1548,
                        "src": "3816:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1569,
                      "name": "RootnodeResolverChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1411,
                      "src": "3782:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 1572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3782:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1573,
                  "nodeType": "EmitStatement",
                  "src": "3777:52:7"
                }
              ]
            },
            "documentation": "@dev This function is used when the rootnode resolver is updated\n @param _newResolver The address of the new ENS Resolver that will manage the root node.",
            "id": 1575,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1551,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1550,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1442,
                  "src": "3624:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3624:9:7"
              }
            ],
            "name": "changeRootnodeResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1548,
                  "name": "_newResolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1575,
                  "src": "3593:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1547,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3593:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3592:22:7"
            },
            "returnParameters": {
              "id": 1552,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3634:0:7"
            },
            "scope": 1793,
            "src": "3561:275:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1594,
              "nodeType": "Block",
              "src": "4054:111:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1585,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "4088:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1586,
                        "name": "_newTtl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1577,
                        "src": "4098:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1582,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "4064:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4064:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setTTL",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1998,
                      "src": "4064:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64) external"
                      }
                    },
                    "id": 1587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4064:42:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1588,
                  "nodeType": "ExpressionStatement",
                  "src": "4064:42:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1590,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "4140:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1591,
                        "name": "_newTtl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1577,
                        "src": "4150:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1589,
                      "name": "RootnodeTTLChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1417,
                      "src": "4121:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$",
                        "typeString": "function (bytes32,uint64)"
                      }
                    },
                    "id": 1592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4121:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1593,
                  "nodeType": "EmitStatement",
                  "src": "4116:42:7"
                }
              ]
            },
            "documentation": "@dev This function is used when the rootnode TTL is updated\n @param _newTtl The address of the new TTL that will manage the root node.",
            "id": 1595,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1580,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1579,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1442,
                  "src": "4044:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4044:9:7"
              }
            ],
            "name": "changeRootnodeTTL",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1577,
                  "name": "_newTtl",
                  "nodeType": "VariableDeclaration",
                  "scope": 1595,
                  "src": "4019:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1576,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4019:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4018:16:7"
            },
            "returnParameters": {
              "id": 1581,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4054:0:7"
            },
            "scope": 1793,
            "src": "3992:173:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1619,
              "nodeType": "Block",
              "src": "4422:206:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1607,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1603,
                          "name": "_authereumEnsResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1597,
                          "src": "4440:21:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1605,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4473:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1604,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4465:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4465:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "4440:35:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416464726573732063616e6e6f74206265206e756c6c",
                        "id": 1608,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4477:24:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        },
                        "value": "Address cannot be null"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4afaa50222afbb974a53ca08ba0ca6e44cf5c380efc008f8ff38660fd1fceb24",
                          "typeString": "literal_string \"Address cannot be null\""
                        }
                      ],
                      "id": 1602,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "4432:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4432:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1610,
                  "nodeType": "ExpressionStatement",
                  "src": "4432:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1611,
                      "name": "authereumEnsResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1399,
                      "src": "4512:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1612,
                      "name": "_authereumEnsResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1597,
                      "src": "4535:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4512:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1614,
                  "nodeType": "ExpressionStatement",
                  "src": "4512:44:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1616,
                        "name": "_authereumEnsResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1597,
                        "src": "4599:21:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1615,
                      "name": "AuthereumEnsResolverChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1421,
                      "src": "4571:27:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4571:50:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1618,
                  "nodeType": "EmitStatement",
                  "src": "4566:55:7"
                }
              ]
            },
            "documentation": "@dev Lets the owner change the address of the Authereum ENS resolver contract\n @param _authereumEnsResolver The address of the Authereun ENS resolver contract",
            "id": 1620,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1600,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1599,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1442,
                  "src": "4412:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4412:9:7"
              }
            ],
            "name": "changeEnsResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1598,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1597,
                  "name": "_authereumEnsResolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1620,
                  "src": "4372:29:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4372:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4371:31:7"
            },
            "returnParameters": {
              "id": 1601,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4422:0:7"
            },
            "scope": 1793,
            "src": "4345:283:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1754,
              "nodeType": "Block",
              "src": "4940:996:7",
              "statements": [
                {
                  "assignments": [
                    1628
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1628,
                      "name": "labelNode",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "4950:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1627,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4950:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1635,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1632,
                            "name": "_label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1622,
                            "src": "4997:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1630,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4902,
                            "src": "4980:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4980:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1633,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4980:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1629,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4909,
                      "src": "4970:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4970:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4950:55:7"
                },
                {
                  "assignments": [
                    1637
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1637,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5015:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1636,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5015:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1645,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1641,
                            "name": "rootNode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1397,
                            "src": "5057:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1642,
                            "name": "labelNode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1628,
                            "src": "5067:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1639,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4902,
                            "src": "5040:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1640,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5040:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5040:37:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1638,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4909,
                      "src": "5030:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5030:48:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5015:63:7"
                },
                {
                  "assignments": [
                    1647
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1647,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5088:20:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1646,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5088:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1653,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1651,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1637,
                        "src": "5134:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1648,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "5111:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5111:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1954,
                      "src": "5111:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 1652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5111:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5088:51:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1659,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1655,
                          "name": "currentOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1647,
                          "src": "5157:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1657,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5181:1:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5173:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5173:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5157:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4c6162656c20697320616c7265616479206f776e6564",
                        "id": 1660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5185:24:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_504774700d415feeadf416b4f24c9534da6feefff03dee0b1faa2a64c86dd456",
                          "typeString": "literal_string \"Label is already owned\""
                        },
                        "value": "Label is already owned"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_504774700d415feeadf416b4f24c9534da6feefff03dee0b1faa2a64c86dd456",
                          "typeString": "literal_string \"Label is already owned\""
                        }
                      ],
                      "id": 1654,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4918,
                        4919
                      ],
                      "referencedDeclaration": 4919,
                      "src": "5149:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5149:61:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1662,
                  "nodeType": "ExpressionStatement",
                  "src": "5149:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1666,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1397,
                        "src": "5277:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1667,
                        "name": "labelNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1628,
                        "src": "5287:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1669,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4967,
                            "src": "5306:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_AuthereumEnsManager_$1793",
                              "typeString": "contract AuthereumEnsManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_AuthereumEnsManager_$1793",
                              "typeString": "contract AuthereumEnsManager"
                            }
                          ],
                          "id": 1668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5298:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5298:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1663,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "5244:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5244:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setSubnodeOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1984,
                      "src": "5244:32:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address) external"
                      }
                    },
                    "id": 1671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5244:68:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1672,
                  "nodeType": "ExpressionStatement",
                  "src": "5244:68:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1676,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1637,
                        "src": "5351:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1677,
                        "name": "authereumEnsResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1399,
                        "src": "5357:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1673,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "5322:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5322:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1991,
                      "src": "5322:28:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5322:56:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1679,
                  "nodeType": "ExpressionStatement",
                  "src": "5322:56:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1683,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1637,
                        "src": "5414:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1684,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "5420:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1680,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "5388:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5388:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1682,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1975,
                      "src": "5388:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5388:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1686,
                  "nodeType": "ExpressionStatement",
                  "src": "5388:39:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1691,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1637,
                        "src": "5488:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1692,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "5494:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1688,
                            "name": "authereumEnsResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1399,
                            "src": "5458:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1687,
                          "name": "AuthereumEnsResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1386,
                          "src": "5437:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_AuthereumEnsResolver_$1386_$",
                            "typeString": "type(contract AuthereumEnsResolver)"
                          }
                        },
                        "id": 1689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5437:42:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AuthereumEnsResolver_$1386",
                          "typeString": "contract AuthereumEnsResolver"
                        }
                      },
                      "id": 1690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setAddr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1369,
                      "src": "5437:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 1693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5437:64:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1694,
                  "nodeType": "ExpressionStatement",
                  "src": "5437:64:7"
                },
                {
                  "assignments": [
                    1699
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1699,
                      "name": "parts",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5535:28:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                        "typeString": "struct strings.slice[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1697,
                          "name": "strings.slice",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2601,
                          "src": "5535:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$2601_storage_ptr",
                            "typeString": "struct strings.slice"
                          }
                        },
                        "id": 1698,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5535:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_storage_$dyn_storage_ptr",
                          "typeString": "struct strings.slice[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1705,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 1703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5586:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 1702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5566:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_slice_$2601_memory_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (struct strings.slice memory[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 1700,
                          "name": "strings.slice",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2601,
                          "src": "5570:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$2601_storage_ptr",
                            "typeString": "struct strings.slice"
                          }
                        },
                        "id": 1701,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5570:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_storage_$dyn_storage_ptr",
                          "typeString": "struct strings.slice[]"
                        }
                      }
                    },
                    "id": 1704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5566:22:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory",
                      "typeString": "struct strings.slice memory[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5535:53:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1706,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1699,
                        "src": "5598:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 1708,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5604:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5598:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$2601_memory",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1709,
                          "name": "_label",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1622,
                          "src": "5609:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "id": 1710,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toSlice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2661,
                        "src": "5609:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2601_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                          "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                        }
                      },
                      "id": 1711,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5609:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$2601_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "src": "5598:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$2601_memory",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 1713,
                  "nodeType": "ExpressionStatement",
                  "src": "5598:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1714,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1699,
                        "src": "5635:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 1716,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5641:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5635:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$2601_memory",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1717,
                          "name": "rootName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1395,
                          "src": "5646:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toSlice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2661,
                        "src": "5646:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2601_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                          "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                        }
                      },
                      "id": 1719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5646:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$2601_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "src": "5635:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$2601_memory",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 1721,
                  "nodeType": "ExpressionStatement",
                  "src": "5635:29:7"
                },
                {
                  "assignments": [
                    1723
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1723,
                      "name": "name",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5674:18:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1722,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5674:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1730,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1728,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1699,
                        "src": "5714:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "2e",
                            "id": 1724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5695:3:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
                              "typeString": "literal_string \".\""
                            },
                            "value": "."
                          },
                          "id": 1725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toSlice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2661,
                          "src": "5695:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2601_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                          }
                        },
                        "id": 1726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5695:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$2601_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1727,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "join",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4298,
                      "src": "5695:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$2601_memory_ptr_$_t_array$_t_struct$_slice_$2601_memory_$dyn_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$2601_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory[] memory) pure returns (string memory)"
                      }
                    },
                    "id": 1729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5695:25:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5674:46:7"
                },
                {
                  "assignments": [
                    1732
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1732,
                      "name": "reverseNode",
                      "nodeType": "VariableDeclaration",
                      "scope": 1754,
                      "src": "5730:19:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1731,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5730:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1740,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1738,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "5803:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1734,
                              "name": "getEnsReverseRegistrar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1517,
                              "src": "5772:22:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsReverseRegistrar_$2059_$",
                                "typeString": "function () view returns (contract EnsReverseRegistrar)"
                              }
                            },
                            "id": 1735,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5772:24:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                              "typeString": "contract EnsReverseRegistrar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                              "typeString": "contract EnsReverseRegistrar"
                            }
                          ],
                          "id": 1733,
                          "name": "EnsReverseRegistrar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2059,
                          "src": "5752:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_EnsReverseRegistrar_$2059_$",
                            "typeString": "type(contract EnsReverseRegistrar)"
                          }
                        },
                        "id": 1736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5752:45:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsReverseRegistrar_$2059",
                          "typeString": "contract EnsReverseRegistrar"
                        }
                      },
                      "id": 1737,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "node",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "5752:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) external returns (bytes32)"
                      }
                    },
                    "id": 1739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5752:58:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5730:80:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1745,
                        "name": "reverseNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1732,
                        "src": "5871:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1746,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1723,
                        "src": "5884:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1742,
                            "name": "authereumEnsResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1399,
                            "src": "5841:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1741,
                          "name": "AuthereumEnsResolver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1386,
                          "src": "5820:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_AuthereumEnsResolver_$1386_$",
                            "typeString": "type(contract AuthereumEnsResolver)"
                          }
                        },
                        "id": 1743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5820:42:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AuthereumEnsResolver_$1386",
                          "typeString": "contract AuthereumEnsResolver"
                        }
                      },
                      "id": 1744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1377,
                      "src": "5820:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 1747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5820:69:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1748,
                  "nodeType": "ExpressionStatement",
                  "src": "5820:69:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1750,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1624,
                        "src": "5916:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1751,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1723,
                        "src": "5924:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1749,
                      "name": "Registered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1427,
                      "src": "5905:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 1752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5905:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1753,
                  "nodeType": "EmitStatement",
                  "src": "5900:29:7"
                }
              ]
            },
            "documentation": "@dev Lets the manager assign an ENS subdomain of the root node to a target address.\n      Registers both the forward and reverse ENS\n @param _label The subdomain label\n @param _owner The owner of the subdomain",
            "id": 1755,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "register",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1625,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1622,
                  "name": "_label",
                  "nodeType": "VariableDeclaration",
                  "scope": 1755,
                  "src": "4891:22:7",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1621,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4891:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1624,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1755,
                  "src": "4915:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4915:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4890:40:7"
            },
            "returnParameters": {
              "id": 1626,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4940:0:7"
            },
            "scope": 1793,
            "src": "4873:1063:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1791,
              "nodeType": "Block",
              "src": "6200:238:7",
              "statements": [
                {
                  "assignments": [
                    1763
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1763,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 1791,
                      "src": "6210:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1762,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6210:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1771,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1767,
                            "name": "rootNode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1397,
                            "src": "6252:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1768,
                            "name": "_subnode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1757,
                            "src": "6262:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1765,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4902,
                            "src": "6235:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6235:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6235:36:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1764,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4909,
                      "src": "6225:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6225:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6210:62:7"
                },
                {
                  "assignments": [
                    1773
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1773,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1791,
                      "src": "6282:20:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1772,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6282:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1779,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1777,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1763,
                        "src": "6328:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1774,
                          "name": "getEnsRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "6305:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_EnsRegistry_$1999_$",
                            "typeString": "function () view returns (contract EnsRegistry)"
                          }
                        },
                        "id": 1775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6305:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EnsRegistry_$1999",
                          "typeString": "contract EnsRegistry"
                        }
                      },
                      "id": 1776,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1954,
                      "src": "6305:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 1778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6305:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6282:51:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1780,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1773,
                      "src": "6346:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6370:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1781,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6362:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6362:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6346:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1788,
                  "nodeType": "IfStatement",
                  "src": "6343:67:7",
                  "trueBody": {
                    "id": 1787,
                    "nodeType": "Block",
                    "src": "6374:36:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6395:4:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1761,
                        "id": 1786,
                        "nodeType": "Return",
                        "src": "6388:11:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 1789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6426:5:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1761,
                  "id": 1790,
                  "nodeType": "Return",
                  "src": "6419:12:7"
                }
              ]
            },
            "documentation": "@dev Returns true is a given subnode is available\n @param _subnode The target subnode\n @return true if the subnode is available",
            "id": 1792,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAvailable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1758,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1757,
                  "name": "_subnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 1792,
                  "src": "6155:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1756,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6155:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6154:18:7"
            },
            "returnParameters": {
              "id": 1761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1760,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1792,
                  "src": "6194:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1759,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6194:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6193:6:7"
            },
            "scope": 1793,
            "src": "6134:304:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1794,
        "src": "585:5855:7"
      }
    ],
    "src": "0:6440:7"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-08-03T02:41:48.284Z",
  "devdoc": {
    "details": "Used to manage all subdomains.This is also known as the Authereum registrar.The public ENS registry is used. The resolver is custom.",
    "methods": {
      "changeEnsResolver(address)": {
        "details": "Lets the owner change the address of the Authereum ENS resolver contract",
        "params": {
          "_authereumEnsResolver": "The address of the Authereun ENS resolver contract"
        }
      },
      "changeRootnodeOwner(address)": {
        "details": "This function is used when the rootnode owner is updated",
        "params": {
          "_newOwner": "The address of the new ENS manager that will manage the root node."
        }
      },
      "changeRootnodeResolver(address)": {
        "details": "This function is used when the rootnode resolver is updated",
        "params": {
          "_newResolver": "The address of the new ENS Resolver that will manage the root node."
        }
      },
      "changeRootnodeTTL(uint64)": {
        "details": "This function is used when the rootnode TTL is updated",
        "params": {
          "_newTtl": "The address of the new TTL that will manage the root node."
        }
      },
      "constructor": {
        "details": "Constructor that sets the ENS root name and root node to manage",
        "params": {
          "_authereumEnsResolver": "Custom Autheruem ENS Resolver address",
          "_ensRegistry": "Custom ENS Registry address",
          "_rootName": "The root name (e.g. authereum.eth)",
          "_rootNode": "The node of the root name (e.g. namehash(authereum.eth))"
        }
      },
      "getEnsRegistry()": {
        "details": "Gets the official ENS registry."
      },
      "getEnsReverseRegistrar()": {
        "details": "Gets the official ENS reverse registrar."
      },
      "isAvailable(bytes32)": {
        "details": "Returns true is a given subnode is available",
        "params": {
          "_subnode": "The target subnode"
        },
        "return": "true if the subnode is available"
      },
      "register(string,address)": {
        "details": "Lets the manager assign an ENS subdomain of the root node to a target address.      Registers both the forward and reverse ENS",
        "params": {
          "_label": "The subdomain label",
          "_owner": "The owner of the subdomain"
        }
      },
      "resolveEns(bytes32)": {
        "details": "Resolves an ENS name to an address.",
        "params": {
          "_node": "The namehash of the ENS name."
        }
      }
    },
    "title": "AuthereumEnsManager"
  },
  "userdoc": {
    "methods": {}
  }
}