{
  "contractName": "DNSSECImpl",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_anchors",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "AlgorithmUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "DigestUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Marker",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "NSEC3DigestUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "rrset",
          "type": "bytes"
        }
      ],
      "name": "RRSetUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "t",
          "type": "uint256"
        }
      ],
      "name": "Test",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "algorithms",
      "outputs": [
        {
          "internalType": "contract Algorithm",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "anchors",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "digests",
      "outputs": [
        {
          "internalType": "contract Digest",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "nsec3Digests",
      "outputs": [
        {
          "internalType": "contract NSEC3Digest",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "internalType": "contract Algorithm",
          "name": "algo",
          "type": "address"
        }
      ],
      "name": "setAlgorithm",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "internalType": "contract Digest",
          "name": "digest",
          "type": "address"
        }
      ],
      "name": "setDigest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "internalType": "contract NSEC3Digest",
          "name": "digest",
          "type": "address"
        }
      ],
      "name": "setNSEC3Digest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_proof",
          "type": "bytes"
        }
      ],
      "name": "submitRRSets",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature",
          "name": "input",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "submitRRSet",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "deleteType",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "deleteName",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature",
          "name": "nsec",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "deleteRRSet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "deleteType",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "deleteName",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature",
          "name": "closestEncloser",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature",
          "name": "nextClosest",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "dnskey",
          "type": "bytes"
        }
      ],
      "name": "deleteRRSetNSEC3",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "dnstype",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        }
      ],
      "name": "rrdata",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        },
        {
          "internalType": "bytes20",
          "name": "",
          "type": "bytes20"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_anchors\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AlgorithmUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"DigestUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Marker\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NSEC3DigestUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"rrset\",\"type\":\"bytes\"}],\"name\":\"RRSetUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"t\",\"type\":\"uint256\"}],\"name\":\"Test\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"algorithms\",\"outputs\":[{\"internalType\":\"contract Algorithm\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anchors\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"deleteType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"deleteName\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"rrset\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"internalType\":\"struct DNSSEC.RRSetWithSignature\",\"name\":\"nsec\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"deleteRRSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"deleteType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"deleteName\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"rrset\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"internalType\":\"struct DNSSEC.RRSetWithSignature\",\"name\":\"closestEncloser\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"rrset\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"internalType\":\"struct DNSSEC.RRSetWithSignature\",\"name\":\"nextClosest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"dnskey\",\"type\":\"bytes\"}],\"name\":\"deleteRRSetNSEC3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"digests\",\"outputs\":[{\"internalType\":\"contract Digest\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"nsec3Digests\",\"outputs\":[{\"internalType\":\"contract NSEC3Digest\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"dnstype\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"}],\"name\":\"rrdata\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"bytes20\",\"name\":\"\",\"type\":\"bytes20\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"internalType\":\"contract Algorithm\",\"name\":\"algo\",\"type\":\"address\"}],\"name\":\"setAlgorithm\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"internalType\":\"contract Digest\",\"name\":\"digest\",\"type\":\"address\"}],\"name\":\"setDigest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"internalType\":\"contract NSEC3Digest\",\"name\":\"digest\",\"type\":\"address\"}],\"name\":\"setNSEC3Digest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"rrset\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"internalType\":\"struct DNSSEC.RRSetWithSignature\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"submitRRSet\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"submitRRSets\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_anchors\":\"The binary format RR entries for the root DS records.\"}},\"deleteRRSet(uint16,bytes,(bytes,bytes),bytes)\":{\"details\":\"Deletes an RR from the oracle.\",\"params\":{\"deleteName\":\"which you want to delete\",\"deleteType\":\"The DNS record type to delete.\",\"nsec\":\"The signed NSEC RRset. This is in the format described in section        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature        data, followed by a series of canonicalised RR records that the signature        applies to.\"}},\"deleteRRSetNSEC3(uint16,bytes,(bytes,bytes),(bytes,bytes),bytes)\":{\"details\":\"Deletes an RR from the oracle using an NSEC3 proof.      Deleting a record using NSEC3 requires using up to two NSEC3 records. There are two cases:       1. The name exists, but the record type doesn't. Eg, example.com has A records but no TXT records.       2. The name does not exist, but a parent name does.      In the first case, we submit one NSEC3 proof in `closestEncloser` that matches the target name      but does not have the bit for `deleteType` set in its type bitmap. In the second case, we submit      two proofs: closestEncloser and nextClosest, that together prove that the name does not exist.      NSEC3 records are in the format described in section 5.3.2 of RFC4035: The RRDATA section      from the RRSIG without the signature data, followed by a series of canonicalised RR records      that the signature applies to.\",\"params\":{\"closestEncloser\":\"An NSEC3 proof matching the closest enclosing name - that is,        the nearest ancestor of the target name that *does* exist.\",\"deleteName\":\"The name to delete.\",\"deleteType\":\"The DNS record type to delete.\",\"dnskey\":\"An encoded DNSKEY record that has already been submitted to the oracle and can be used        to verify the signatures closestEncloserSig and nextClosestSig\",\"nextClosest\":\"An NSEC3 proof covering the next closest name. This proves that the immediate        subdomain of the closestEncloser does not exist.\"}},\"rrdata(uint16,bytes)\":{\"details\":\"Returns data about the RRs (if any) known to this oracle with the provided type and name.\",\"params\":{\"dnstype\":\"The DNS record type to query.\",\"name\":\"The name to query, in DNS label-sequence format.\"},\"returns\":{\"_0\":\"inception The unix timestamp at which the signature for this RRSET was created.\",\"_1\":\"inserted The unix timestamp at which this RRSET was inserted into the oracle.\",\"_2\":\"hash The hash of the RRset that was inserted.\"}},\"setAlgorithm(uint8,address)\":{\"details\":\"Sets the contract address for a signature verification algorithm.      Callable only by the owner.\",\"params\":{\"algo\":\"The address of the algorithm contract.\",\"id\":\"The algorithm ID\"}},\"setDigest(uint8,address)\":{\"details\":\"Sets the contract address for a digest verification algorithm.      Callable only by the owner.\",\"params\":{\"digest\":\"The address of the digest contract.\",\"id\":\"The digest ID\"}},\"setNSEC3Digest(uint8,address)\":{\"details\":\"Sets the contract address for an NSEC3 digest algorithm.      Callable only by the owner.\",\"params\":{\"digest\":\"The address of the digest contract.\",\"id\":\"The digest ID\"}},\"submitRRSet((bytes,bytes),bytes)\":{\"details\":\"Submits a signed set of RRs to the oracle. RRSETs are only accepted if they are signed with a key that is already trusted, or if they are self-signed, and the signing key is identified by a DS record that is already trusted.\",\"params\":{\"input\":\"The signed RR set. This is in the format described in section        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature        data, followed by a series of canonicalised RR records that the signature        applies to.\",\"proof\":\"The DNSKEY or DS to validate the signature against. Must Already        have been submitted and proved previously.\"}},\"submitRRSets(bytes,bytes)\":{\"details\":\"Submits multiple RRSets\",\"params\":{\"_proof\":\"The DNSKEY or DS to validate the first signature against.\",\"data\":\"The data to submit, as a series of chunks. Each chunk is        in the format <uint16 length><bytes input><uint16 length><bytes sig>\"},\"returns\":{\"_0\":\"The last RRSET submitted.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/arachnid/Dropbox/projects/enssec/contracts/DNSSECImpl.sol\":\"DNSSECImpl\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/arachnid/Dropbox/projects/enssec/contracts/BytesUtils.sol\":{\"keccak256\":\"0x17b0123a981825ac9445ec82c8e20288321b27139518ba1f81c4cbd06f1312ab\",\"urls\":[\"bzz-raw://fe03e00240c645751873f38f56cc3db12d19a82538a0f0e9648ccfc23e8a715d\",\"dweb:/ipfs/QmbT7Q7GUgkZFY5gA4RxhWg3anPKiH9EZoM6HWBKDkK7dp\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/DNSSEC.sol\":{\"keccak256\":\"0x8657b615b0d13ca3c52be359127af8d4251b845255cf870ac30f3541eaa62db8\",\"urls\":[\"bzz-raw://2db577b2144ea6b7439d7a244b931b704ecea548bba5707df57528b56d528c81\",\"dweb:/ipfs/QmbjYLu3w6DrLvvY9fFCFBUc2mfjjvj2ULeEBKw6FXHR6q\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/DNSSECImpl.sol\":{\"keccak256\":\"0xf73c1822129a639ab13967b362f1e783db0957ff8f86119d844bd340cd0ded82\",\"urls\":[\"bzz-raw://d0d32724e090ec7c3cf78a4b358c42b01fe77cbbd69499d830eb18e9df7f9910\",\"dweb:/ipfs/QmZvL58RqeeApjxfPsUufUBt1NQWbtzxqLQZPCXn4QfchW\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/Owned.sol\":{\"keccak256\":\"0x2d898d887fa5f2aa2658777c989e86617d138e40216c98284039d6a54c3ffe04\",\"urls\":[\"bzz-raw://d0c8cde23faa39ef411227c470b75c502577ebfb175f42eb143949964ebfa35e\",\"dweb:/ipfs/QmXL3F6iEhVvwa6dGj2dgM8Bat1NwUusv6n45Wegh4QSgb\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/RRUtils.sol\":{\"keccak256\":\"0x52cca336743e65b57ce01a30bbc7ed8523758853ab7d35db57a6f40d4a3bf892\",\"urls\":[\"bzz-raw://feb1f75afcea14258289d466c9bfcb4cf648858791ff1780b5d3a4191e4158e2\",\"dweb:/ipfs/QmTc4vx6sEx9jW3Efu1QAFQQ7JTarfMDYwgv4FzZoxTWUx\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/Algorithm.sol\":{\"keccak256\":\"0xc1e27c3d1787a2f22e877708760f3980f4febc25a5eab75f556c5cc3fffaea87\",\"urls\":[\"bzz-raw://b42522404011c767d9e1acf1f3f69b1b648bd8f0a99436433cb7d0c0c7ecc44c\",\"dweb:/ipfs/QmRd45RsUPf3HPMtCH7niRdDn1LSTyw3351VU9BKDJNwq4\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/digests/Digest.sol\":{\"keccak256\":\"0x10a3ed9231c6a7e16c5e673f8449f205c33df2a2cc4c09db0abac046abe6231e\",\"urls\":[\"bzz-raw://589c2266b6124c93c8410059d9f5902ca95d23a5e04961aa0c7489fcdc63e57c\",\"dweb:/ipfs/QmPKkuWhG6TtQXeEG5nTu8WukjeojqSMANqBgCFMf8fdnC\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/nsec3digests/NSEC3Digest.sol\":{\"keccak256\":\"0xfee2cfbb4658f4173e7f09eb955dc36086c70b8fd043d8b47774907b7062f725\",\"urls\":[\"bzz-raw://a85576d724f3a16169c94b4076fa2ba4446bc77d2b7119bbbce04ecb64c47c6c\",\"dweb:/ipfs/QmTCARUgwmNSLKMvXdUcHfeQ7Et7LCGmnYaEgS5iytzfEt\"]},\"@ensdomains/buffer/contracts/Buffer.sol\":{\"keccak256\":\"0x3dc6d79ec7994ddf8ce80248f2d53635254b8e5b19617ee257ae5857e9da1bd1\",\"urls\":[\"bzz-raw://f72312eafad4c9d6f9917a5f4bd0555011a26bfbf86313f9d8de374097e7b61c\",\"dweb:/ipfs/QmcCBXetT1ie4GtA1N6HckQeucq7er4jc1yUbypYvMBjZv\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620040dd380380620040dd833981810160405281019062000037919062000311565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000908051906020019062000090929190620001ff565b506040518060600160405280600063ffffffff1681526020014267ffffffffffffffff1681526020016000604051620000ca9190620004ad565b60405180910390206bffffffffffffffffffffffff1916815250600260007fbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a81526020019081526020016000206000602b61ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550604082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908360601c02179055509050507f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b6000604051620001f09190620004c6565b60405180910390a150620005cf565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000237576000855562000283565b82601f106200025257805160ff191683800117855562000283565b8280016001018555821562000283579182015b828111156200028257825182559160200191906001019062000265565b5b50905062000292919062000296565b5090565b5b80821115620002b157600081600090555060010162000297565b5090565b600082601f830112620002c757600080fd5b8151620002de620002d88262000533565b620004ff565b91508082526020830160208301858383011115620002fb57600080fd5b6200030883828462000597565b50505092915050565b6000602082840312156200032457600080fd5b600082015167ffffffffffffffff8111156200033f57600080fd5b6200034d84828501620002b5565b91505092915050565b6000815460018116600081146200037657600181146200039f57620003e9565b607f60028304166200038981876200057b565b955060ff198316865260208601935050620003e9565b60028204620003af81876200057b565b9550620003bc8562000566565b60005b82811015620003e057815481890152600182019150602081019050620003bf565b80880195505050505b505092915050565b600081546001811660008114620004115760018114620004395762000483565b607f60028304166200042481876200058c565b955060ff198316865280860193505062000483565b600282046200044981876200058c565b9550620004568562000566565b60005b828110156200047a5781548189015260018201915060208101905062000459565b82880195505050505b505092915050565b60006200049a6001836200057b565b9150600080830152602082019050919050565b6000620004bb8284620003f1565b915081905092915050565b60006040820190508181036000830152620004e1816200048b565b90508181036020830152620004f7818462000356565b905092915050565b6000604051905081810181811067ffffffffffffffff82111715620005295762000528620005cd565b5b8060405250919050565b600067ffffffffffffffff821115620005515762000550620005cd565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600082825260208201905092915050565b600081905092915050565b60005b83811015620005b75780820151818401526020810190506200059a565b83811115620005c7576000848401525b50505050565bfe5b613afe80620005df6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806376a14d1d1161008c57806398d35f201161006657806398d35f2014610247578063bd7ed31a14610265578063c327deef14610295578063d7b82ebe146102c5576100ea565b806376a14d1d146101dd5780638438dc041461020d5780638da5cb5b14610229576100ea565b806313af4035116100c857806313af40351461015957806328e7677d146101755780632c095cbb1461019157806373cc48a6146101ad576100ea565b8063020ed8d3146100ef578063087991bc1461010b5780630b1a24951461013d575b600080fd5b610109600480360381019061010491906133ac565b6102f5565b005b610125600480360381019061012091906131a9565b6103e4565b60405161013493929190613714565b60405180910390f35b610157600480360381019061015291906132ac565b61047f565b005b610173600480360381019061016e9190613056565b61070b565b005b61018f600480360381019061018a91906133e8565b6107a9565b005b6101ab60048036038101906101a69190613201565b610898565b005b6101c760048036038101906101c29190613383565b6109f5565b6040516101d491906136be565b60405180910390f35b6101f760048036038101906101f291906130d1565b610a28565b60405161020491906135b9565b60405180910390f35b61022760048036038101906102229190613424565b610ae6565b005b610231610bd5565b60405161023e919061359e565b60405180910390f35b61024f610bfb565b60405161025c91906135b9565b60405180910390f35b61027f600480360381019061027a9190613383565b610c99565b60405161028c91906136d9565b60405180910390f35b6102af60048036038101906102aa9190613383565b610ccc565b6040516102bc91906136a3565b60405180910390f35b6102df60048036038101906102da919061313d565b610cff565b6040516102ec91906135b9565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461034f57600080fd5b80600360008460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa882826040516103d892919061374b565b60405180910390a15050565b6000806000806002600087876040516103fe929190613585565b6040518091039020815260200190815260200160002060008861ffff1661ffff16815260200190815260200160002090508060000160009054906101000a900463ffffffff168160000160049054906101000a900467ffffffffffffffff1682600001600c9054906101000a900460601b9350935093505093509350939050565b6000600260008680519060200120815260200190815260200160002060008761ffff1661ffff16815260200190815260200160002060000160009054906101000a900463ffffffff1690506104d2612cfb565b6104dc8584610d13565b90506104e9818784610dd0565b6104f1612cfb565b60008560000151511115610517576105098585610d13565b9050610516818885610dd0565b5b61051f612d6e565b61052883610e1d565b9050600060fe82602001511660ff161461054157600080fd5b610555602782610e6790919063ffffffff16565b15801561058e5750610571600282610e6790919063ffffffff16565b158061058d575061058c600682610e6790919063ffffffff16565b5b5b61059757600080fd5b6105a8898985610120015184610e81565b1561064157600260008980519060200120815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549067ffffffffffffffff021916905560008201600c6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050610700565b61066189898561012001518486610120015161065c88610e1d565b610ebb565b156106fa57600260008980519060200120815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549067ffffffffffffffff021916905560008201600c6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550506106ff565b600080fd5b5b505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461076557600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080357600080fd5b80600460008460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c7828260405161088c92919061374b565b60405180910390a15050565b6108a0612cfb565b6108aa8383610d13565b9050602f61ffff16816000015161ffff16146108c557600080fd5b6000600260008680519060200120815260200190815260200160002060008761ffff1661ffff16815260200190815260200160002060000160009054906101000a900463ffffffff168260a001510360030b121561092257600080fd5b61092a612db1565b61093382610fe2565b905061093e81611001565b6109e957610953818361012001518789611017565b600260008680519060200120815260200190815260200160002060008761ffff1661ffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549067ffffffffffffffff021916905560008201600c6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050506109ef565b50600080fd5b50505050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600060608390505b8451821015610adb57610a43612dfc565b610a7160028401610a5d858961122590919063ffffffff16565b61ffff168861124b9092919063ffffffff16565b816000018190525060028160000151510183019250610ab460028401610aa0858961122590919063ffffffff16565b61ffff168861124b9092919063ffffffff16565b816020018190525060028160200151510183019250610ad381836112d5565b915050610a32565b809250505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b4057600080fd5b80600560008460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d8282604051610bc992919061374b565b60405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c915780601f10610c6657610100808354040283529160200191610c91565b820191906000526020600020905b815481529060010190602001808311610c7457829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610d0b83836112d5565b905092915050565b610d1b612cfb565b610d2883600001516114e8565b9050610d388160e0015183611652565b610d4157600080fd5b6060610d518283600001516116f1565b9050816040015160ff16610d6f6000836117c890919063ffffffff16565b14610d7957600080fd5b80826101200181905250600042836080015163ffffffff160360030b1215610da057600080fd5b60008260a0015163ffffffff16420360030b1215610dbd57600080fd5b610dc981838686611828565b5092915050565b6000818460a001510360030b1215610de757600080fd5b603261ffff16836000015161ffff1614610e0057600080fd5b610e0f83610120015183611925565b610e1857600080fd5b505050565b610e25612d6e565b610e2d612db1565b610e3683610fe2565b9050610e5f8160a001518260a001518360c001510383600001516119a69092919063ffffffff16565b915050919050565b6000610e798360a00151600084611af4565b905092915050565b6000610e8e828486611c07565b15610eae57610ea68583610e6790919063ffffffff16565b159050610eb3565b600090505b949350505050565b60008060fe83602001511660ff1614610ed357600080fd5b6000610ede86611c31565b90506000610eeb85611c31565b90506000806001610f0660008c611c6690919063ffffffff16565b0160ff1690505b8951811015610fcf5783610f3889610f3384858f51038f61124b9092919063ffffffff16565b611c8a565b1415610faa576000610f6187610f5c85868f51038f61124b9092919063ffffffff16565b611c8a565b90508660800151841015610f8d578381118015610f815750866080015181105b95505050505050610fd8565b83811180610f9e5750866080015181105b95505050505050610fd8565b8091506001610fc2828c611c6690919063ffffffff16565b0160ff1681019050610f0d565b50600093505050505b9695505050505050565b610fea612db1565b610ffa8261010001516000611d66565b9050919050565b6000816000015151826020015110159050919050565b60008460a0015190506000611039828760000151611d9090919063ffffffff16565b905060008660a001518760c0015103905081811161105657600080fd5b600061106b8787611deb90919063ffffffff16565b905060008114156110a057611091838501868a60000151611af49092919063ffffffff16565b1561109b57600080fd5b611107565b60606110bb85858b6000015161124b9092919063ffffffff16565b9050600082136110ca57600080fd5b60006110df828a611deb90919063ffffffff16565b12156111055760006110fa8289611deb90919063ffffffff16565b1261110457600080fd5b5b505b5050505050505050565b8060c0015181602001818152505080600001515181602001511061113457611222565b600061114882600001518360200151611d90565b826020015101905061116781836000015161122590919063ffffffff16565b826040019061ffff16908161ffff168152505060028101905061119781836000015161122590919063ffffffff16565b826060019061ffff16908161ffff16815250506002810190506111c7818360000151611f7a90919063ffffffff16565b826080019063ffffffff16908163ffffffff168152505060048101905060006111fd82846000015161122590919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b6000825160028301111561123857600080fd5b61ffff8260028501015116905092915050565b60608351828401111561125d57600080fd5b60608267ffffffffffffffff8111801561127657600080fd5b506040519080825280601f01601f1916602001820160405280156112a95781602001600182028036833780820191505090505b50905060008060208301915085602088010190506112c8828287611fa2565b8293505050509392505050565b60606112df612cfb565b6112e98484610d13565b90506000600260008361012001518051906020012081526020019081526020016000206000836000015161ffff1661ffff168152602001908152602001600020905060008160000160049054906101000a900467ffffffffffffffff1667ffffffffffffffff1611156113825760008160000160009054906101000a900463ffffffff168360a001510360030b121561138157600080fd5b5b60405180606001604052808360a0015163ffffffff1681526020014267ffffffffffffffff168152602001836101000151805190602001206bffffffffffffffffffffffff1916815250600260008461012001518051906020012081526020019081526020016000206000846000015161ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550604082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908360601c02179055509050507f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b8261012001518361010001516040516114d09291906135db565b60405180910390a18161010001519250505092915050565b6114f0612cfb565b61150460008361122590919063ffffffff16565b816000019061ffff16908161ffff168152505061152b600283611c6690919063ffffffff16565b816020019060ff16908160ff1681525050611550600383611c6690919063ffffffff16565b816040019060ff16908160ff1681525050611575600483611f7a90919063ffffffff16565b816060019063ffffffff16908163ffffffff16815250506115a0600883611f7a90919063ffffffff16565b816080019063ffffffff16908163ffffffff16815250506115cb600c83611f7a90919063ffffffff16565b8160a0019063ffffffff16908163ffffffff16815250506115f660108361122590919063ffffffff16565b8160c0019061ffff16908161ffff1681525050611614826012611feb565b8160e001819052506116448160e00151516012018260e00151516012855103038461124b9092919063ffffffff16565b816101000181905250919050565b60008061167b61166c600085611d9090919063ffffffff16565b8461122590919063ffffffff16565b905082805190602001206bffffffffffffffffffffffff1916600260008680519060200120815260200190815260200160002060008361ffff1661ffff168152602001908152602001600020600001600c9054906101000a900460601b6bffffffffffffffffffffffff19161491505092915050565b60606116fb612db1565b61170484610fe2565b90505b61171081611001565b6117c157600161ffff16816060015161ffff161461172d57600080fd5b6000825114156117475761174081612019565b915061179b565b61176281602001518260000151611d9090919063ffffffff16565b82511461176e57600080fd5b61179160008260000151836020015185518661205090949392919063ffffffff16565b61179a57600080fd5b5b8261ffff16816040015161ffff16146117b357600080fd5b6117bc81611111565b611707565b5092915050565b600080600090505b60011561181e57835183106117e157fe5b60006117f68486611c6690919063ffffffff16565b60ff16905060018101840193506000811415611812575061181e565b600182019150506117d0565b8091505092915050565b83518360e0015151111561183b57600080fd5b61185f6000858560e00151518751038660e00151612074909392919063ffffffff16565b61186857600080fd5b611870612db1565b611884600083611d6690919063ffffffff16565b9050602b61ffff16816040015161ffff1614156118b4576118a684848361209d565b6118af57600080fd5b61191e565b603061ffff16816040015161ffff1614156118e2576118d4848483612153565b6118dd57600080fd5b61191d565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611914906136f4565b60405180910390fd5b5b5050505050565b600080600161193e600086611c6690919063ffffffff16565b0160ff16905060005b83518110156119995761196781868487612074909392919063ffffffff16565b15611977576001925050506119a0565b600161198c8286611c6690919063ffffffff16565b0160ff1681019050611947565b6000925050505b92915050565b6119ae612d6e565b600082840190506119cb6000850186611c6690919063ffffffff16565b826000019060ff16908160ff16815250506119f26001850186611c6690919063ffffffff16565b826020019060ff16908160ff1681525050611a19600285018661122590919063ffffffff16565b826040019061ffff16908161ffff16815250506000611a446004860187611c6690919063ffffffff16565b9050600585019450611a64858260ff168861124b9092919063ffffffff16565b83606001819052508060ff16850194506000611a898688611c6690919063ffffffff16565b905060208160ff161115611a9c57600080fd5b600186019550611aba868260ff16896122159092919063ffffffff16565b8460800181815250508060ff1686019550611ae2868785038961124b9092919063ffffffff16565b8460a001819052505050509392505050565b60008060088361ffff16901c90506000600860ff851661ffff1681611b1557fe5b04905060006007851660070360ff16600160ff16901b905060008690505b8751811015611bf7576000611b51828a611c6690919063ffffffff16565b90506000611b6b600184018b611c6690919063ffffffff16565b90508160ff168660ff161015611b8a5760009650505050505050611c00565b8160ff168660ff161415611be5578460ff168160ff1611611bb45760009650505050505050611c00565b600084611bd260028860ff168701018d611c6690919063ffffffff16565b1660ff1614159650505050505050611c00565b6002810160ff16830192505050611b33565b50600093505050505b9392505050565b600080611c148584611c8a565b90506000611c2185611c31565b9050808214925050509392505050565b6000611c5f6001611c4c600085611c6690919063ffffffff16565b60ff16846122549092919063ffffffff16565b9050919050565b6000828281518110611c7457fe5b602001015160f81c60f81b60f81c905092915050565b600060056000846000015160ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368f9dab284606001518486604001516040518463ffffffff1660e01b8152600401611d0e9392919061365e565b60206040518083038186803b158015611d2657600080fd5b505afa158015611d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5e91906130a8565b905092915050565b611d6e612db1565b828160000181905250818160c0018181525050611d8a81611111565b92915050565b6000808290505b600115611ddf5783518110611da857fe5b6000611dbd8286611c6690919063ffffffff16565b60ff16905060018101820191506000811415611dd95750611ddf565b50611d97565b82810391505092915050565b6000611e00828461248190919063ffffffff16565b15611e0e5760009050611f74565b6000806000806000611e218860006117c8565b90506000611e308860006117c8565b90505b80821115611e5857859350611e4889876124a8565b9550818060019003925050611e33565b5b81811115611e7e57849250611e6e88866124a8565b9450808060019003915050611e59565b5b600082118015611ea35750611ea18689878c612074909392919063ffffffff16565b155b15611ed157859350611eb589876124a8565b9550849250611ec488866124a8565b9450600182039150611e7f565b6000861415611f08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9650505050505050611f74565b6000851415611f205760019650505050505050611f74565b611f6b60018501611f3a868c611c6690919063ffffffff16565b60ff168a60018701611f55888e611c6690919063ffffffff16565b60ff168e6124cd9095949392919063ffffffff16565b96505050505050505b92915050565b60008251600483011115611f8d57600080fd5b63ffffffff8260048501015116905092915050565b5b60208110611fc65781518352602083019250602082019150602081039050611fa3565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60606000611ff98484611d90565b905061201083828661124b9092919063ffffffff16565b91505092915050565b6060612049826020015161203584600001518560200151611d90565b846000015161124b9092919063ffffffff16565b9050919050565b600061205d8484846125a8565b6120688787856125a8565b14905095945050505050565b60006120848383848651036125a8565b6120928686878951036125a8565b149050949350505050565b60006120a7612db1565b6120b085610fe2565b90505b6120bc81611001565b61214657603061ffff16816040015161ffff16146120d957600080fd5b60606120e4826125cb565b90506120ee612e16565b61210560008351846125fb9092919063ffffffff16565b9050612113818389896126a4565b156121365761212c61212484612019565b868385612803565b935050505061214c565b505061214181611111565b6120b3565b50600090505b9392505050565b60006121748460e0015161216684612019565b61248190919063ffffffff16565b61217d57600080fd5b5b61218782611001565b61220d576121aa8460e0015161219c84612019565b61248190919063ffffffff16565b6121b357600080fd5b60606121be836125cb565b90506121c8612e16565b6121df60008351846125fb9092919063ffffffff16565b90506121ed818388886126a4565b156121fd5760019250505061220e565b505061220882611111565b61217e565b5b9392505050565b6000602082111561222557600080fd5b8351828401111561223557600080fd5b6001826020036101000a03198084602087010151169150509392505050565b6000603482111561226457600080fd5b60008080600090505b84811015612370576000878288018151811061228557fe5b602001015160f81c60f81b9050603060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101580156122ee5750607a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b6122f757600080fd5b604051806080016040528060478152602001613a826047913960308260f81c60ff16038151811061232457fe5b602001015160f81c60f81b60f81c925060208360ff16111561234557600080fd5b600186038214156123565750612370565b8260ff16600585901b17935050808060010191505061226d565b50600060058502905060006008868161238557fe5b06141561239d578160ff16600584901b17925061246a565b6002600886816123a957fe5b0614156123ce5760028260ff16901c60ff16600384901b179250600281039050612469565b6004600886816123da57fe5b0614156123ff5760048260ff16901c60ff16600184901b179250600481039050612468565b60056008868161240b57fe5b0614156124305760018260ff16901c60ff16600484901b179250600181039050612467565b60076008868161243c57fe5b0614156124615760038260ff16901c60ff16600284901b179250600381039050612466565b600080fd5b5b5b5b5b806101000383901b60001b93505050509392505050565b6000815183511480156124a0575061249f8360008460008751612050565b5b905092915050565b60006124bd8284611c6690919063ffffffff16565b60ff166001830101905092915050565b600080859050858310156124df578290505b600080602089018a019150602086018701905060005b8381101561259457600080845191508351905080821461257b5760006020871115612542577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050612555565b600184886020030160080260020a031990505b60008183168285160390506000811461257857809850505050505050505061259e565b50505b60208501945060208401935050506020810190506124f5565b5084880393505050505b9695505050505050565b6000835182840111156125ba57600080fd5b818360208601012090509392505050565b60606125f48260a001518360a001518460c0015103846000015161124b9092919063ffffffff16565b9050919050565b612603612e16565b612619600084018561122590919063ffffffff16565b816000019061ffff16908161ffff16815250506126426002840185611c6690919063ffffffff16565b816020019060ff16908160ff16815250506126696003840185611c6690919063ffffffff16565b816040019060ff16908160ff168152505061269560048401600484038661124b9092919063ffffffff16565b81606001819052509392505050565b60006003856020015160ff16146126be57600090506127fb565b826020015160ff16856040015160ff16146126dc57600090506127fb565b60006126e785612924565b90508360c0015161ffff168161ffff16146127065760009150506127fb565b6000610100876000015161ffff161614156127255760009150506127fb565b60036000876040015160ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de8f50a186856000015186602001516040518463ffffffff1660e01b81526004016127a793929190613612565b60206040518083038186803b1580156127bf57600080fd5b505afa1580156127d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f7919061307f565b9150505b949350505050565b60008061280f83612924565b90505b61281b85611001565b61291657606061282a866125cb565b9050612834612e48565b61285b8760a001518860a001518960c0015103896000015161299d9092919063ffffffff16565b90508261ffff16816000015161ffff1614612877575050612908565b856040015160ff16816020015160ff1614612893575050612908565b61289b612e7a565b6128b286518a510182612a4690919063ffffffff16565b506128c68982612a9a90919063ffffffff16565b506128da8682612a9a90919063ffffffff16565b506128f2826040015182600001518460600151612abc565b1561290457600194505050505061291c565b5050505b61291185611111565b612812565b60009150505b949350505050565b60008060005b835181101561298d5760006001821614612959576129518185611c6690919063ffffffff16565b60ff16612978565b600861296e8286611c6690919063ffffffff16565b60ff1661ffff16901b5b61ffff1682019150808060010191505061292a565b50601081901c8101915050919050565b6129a5612e48565b6129bb600084018561122590919063ffffffff16565b816000019061ffff16908161ffff16815250506129e46002840185611c6690919063ffffffff16565b816020019060ff16908160ff1681525050612a0b6003840185611c6690919063ffffffff16565b816040019060ff16908160ff1681525050612a3760048401600484038661124b9092919063ffffffff16565b81606001819052509392505050565b612a4e612e7a565b600060208381612a5a57fe5b0614612a735760208281612a6a57fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b612aa2612e7a565b612ab483846000015151848551612c02565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600460008660ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b345760009050612bfb565b600460008560ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7e83aee84846040518363ffffffff1660e01b8152600401612ba89291906135db565b60206040518083038186803b158015612bc057600080fd5b505afa158015612bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf8919061307f565b90505b9392505050565b612c0a612e7a565b8251821115612c1857600080fd5b84602001518285011115612c4357612c42856002612c3c8860200151888701612cbb565b02612cd7565b5b600080865180518760208301019350808887011115612c625787860182525b60208701925050505b60208410612c8e5780518252602082019150602081019050602084039350612c6b565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b600081831115612ccd57829050612cd1565b8190505b92915050565b606082600001519050612cea8383612a46565b50612cf58382612a9a565b50505050565b604051806101400160405280600061ffff168152602001600060ff168152602001600060ff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b6040518060c00160405280600060ff168152602001600060ff168152602001600061ffff1681526020016060815260200160008019168152602001606081525090565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b604051806040016040528060608152602001606081525090565b6040518060800160405280600061ffff168152602001600060ff168152602001600060ff168152602001606081525090565b6040518060800160405280600061ffff168152602001600060ff168152602001600060ff168152602001606081525090565b604051806040016040528060608152602001600081525090565b600081359050612ea3816139c9565b92915050565b600081519050612eb8816139e0565b92915050565b600081519050612ecd816139f7565b92915050565b60008083601f840112612ee557600080fd5b8235905067ffffffffffffffff811115612efe57600080fd5b602083019150836001820283011115612f1657600080fd5b9250929050565b600082601f830112612f2e57600080fd5b8135612f41612f3c826137a5565b613774565b91508082526020830160208301858383011115612f5d57600080fd5b612f68838284613974565b50505092915050565b600081359050612f8081613a0e565b92915050565b600081359050612f9581613a25565b92915050565b600081359050612faa81613a3c565b92915050565b600060408284031215612fc257600080fd5b612fcc6040613774565b9050600082013567ffffffffffffffff811115612fe857600080fd5b612ff484828501612f1d565b600083015250602082013567ffffffffffffffff81111561301457600080fd5b61302084828501612f1d565b60208301525092915050565b60008135905061303b81613a53565b92915050565b60008135905061305081613a6a565b92915050565b60006020828403121561306857600080fd5b600061307684828501612e94565b91505092915050565b60006020828403121561309157600080fd5b600061309f84828501612ea9565b91505092915050565b6000602082840312156130ba57600080fd5b60006130c884828501612ebe565b91505092915050565b600080604083850312156130e457600080fd5b600083013567ffffffffffffffff8111156130fe57600080fd5b61310a85828601612f1d565b925050602083013567ffffffffffffffff81111561312757600080fd5b61313385828601612f1d565b9150509250929050565b6000806040838503121561315057600080fd5b600083013567ffffffffffffffff81111561316a57600080fd5b61317685828601612fb0565b925050602083013567ffffffffffffffff81111561319357600080fd5b61319f85828601612f1d565b9150509250929050565b6000806000604084860312156131be57600080fd5b60006131cc8682870161302c565b935050602084013567ffffffffffffffff8111156131e957600080fd5b6131f586828701612ed3565b92509250509250925092565b6000806000806080858703121561321757600080fd5b60006132258782880161302c565b945050602085013567ffffffffffffffff81111561324257600080fd5b61324e87828801612f1d565b935050604085013567ffffffffffffffff81111561326b57600080fd5b61327787828801612fb0565b925050606085013567ffffffffffffffff81111561329457600080fd5b6132a087828801612f1d565b91505092959194509250565b600080600080600060a086880312156132c457600080fd5b60006132d28882890161302c565b955050602086013567ffffffffffffffff8111156132ef57600080fd5b6132fb88828901612f1d565b945050604086013567ffffffffffffffff81111561331857600080fd5b61332488828901612fb0565b935050606086013567ffffffffffffffff81111561334157600080fd5b61334d88828901612fb0565b925050608086013567ffffffffffffffff81111561336a57600080fd5b61337688828901612f1d565b9150509295509295909350565b60006020828403121561339557600080fd5b60006133a384828501613041565b91505092915050565b600080604083850312156133bf57600080fd5b60006133cd85828601613041565b92505060206133de85828601612f71565b9150509250929050565b600080604083850312156133fb57600080fd5b600061340985828601613041565b925050602061341a85828601612f86565b9150509250929050565b6000806040838503121561343757600080fd5b600061344585828601613041565b925050602061345685828601612f9b565b9150509250929050565b6134698161380d565b82525050565b6134788161382b565b82525050565b600061348a83856137f1565b9350613497838584613974565b82840190509392505050565b60006134ae826137d5565b6134b881856137e0565b93506134c8818560208601613983565b6134d1816139b8565b840191505092915050565b6134e5816138f6565b82525050565b6134f48161391a565b82525050565b6135038161393e565b82525050565b60006135166014836137fc565b91507f4e6f2076616c69642070726f6f6620666f756e640000000000000000000000006000830152602082019050919050565b61355281613962565b82525050565b613561816138c5565b82525050565b613570816138d5565b82525050565b61357f816138e9565b82525050565b600061359282848661347e565b91508190509392505050565b60006020820190506135b36000830184613460565b92915050565b600060208201905081810360008301526135d381846134a3565b905092915050565b600060408201905081810360008301526135f581856134a3565b9050818103602083015261360981846134a3565b90509392505050565b6000606082019050818103600083015261362c81866134a3565b9050818103602083015261364081856134a3565b9050818103604083015261365481846134a3565b9050949350505050565b6000606082019050818103600083015261367881866134a3565b9050818103602083015261368c81856134a3565b905061369b6040830184613549565b949350505050565b60006020820190506136b860008301846134dc565b92915050565b60006020820190506136d360008301846134eb565b92915050565b60006020820190506136ee60008301846134fa565b92915050565b6000602082019050818103600083015261370d81613509565b9050919050565b60006060820190506137296000830186613558565b6137366020830185613567565b613743604083018461346f565b949350505050565b60006040820190506137606000830185613576565b61376d6020830184613460565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561379b5761379a6139b6565b5b8060405250919050565b600067ffffffffffffffff8211156137c0576137bf6139b6565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613818826138a5565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b600061386c8261380d565b9050919050565b600061387e8261380d565b9050919050565b60006138908261380d565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061390182613908565b9050919050565b6000613913826138a5565b9050919050565b60006139258261392c565b9050919050565b6000613937826138a5565b9050919050565b600061394982613950565b9050919050565b600061395b826138a5565b9050919050565b600061396d82613897565b9050919050565b82818337600083830152505050565b60005b838110156139a1578082015181840152602081019050613986565b838111156139b0576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b6139d28161380d565b81146139dd57600080fd5b50565b6139e98161381f565b81146139f457600080fd5b50565b613a0081613857565b8114613a0b57600080fd5b50565b613a1781613861565b8114613a2257600080fd5b50565b613a2e81613873565b8114613a3957600080fd5b50565b613a4581613885565b8114613a5057600080fd5b50565b613a5c81613897565b8114613a6757600080fd5b50565b613a73816138e9565b8114613a7e57600080fd5b5056fe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa26469706673582212200216645409792671f8799f90a91efe98143ca44c41d86ddbe5ca89906d1f857964736f6c63430007040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806376a14d1d1161008c57806398d35f201161006657806398d35f2014610247578063bd7ed31a14610265578063c327deef14610295578063d7b82ebe146102c5576100ea565b806376a14d1d146101dd5780638438dc041461020d5780638da5cb5b14610229576100ea565b806313af4035116100c857806313af40351461015957806328e7677d146101755780632c095cbb1461019157806373cc48a6146101ad576100ea565b8063020ed8d3146100ef578063087991bc1461010b5780630b1a24951461013d575b600080fd5b610109600480360381019061010491906133ac565b6102f5565b005b610125600480360381019061012091906131a9565b6103e4565b60405161013493929190613714565b60405180910390f35b610157600480360381019061015291906132ac565b61047f565b005b610173600480360381019061016e9190613056565b61070b565b005b61018f600480360381019061018a91906133e8565b6107a9565b005b6101ab60048036038101906101a69190613201565b610898565b005b6101c760048036038101906101c29190613383565b6109f5565b6040516101d491906136be565b60405180910390f35b6101f760048036038101906101f291906130d1565b610a28565b60405161020491906135b9565b60405180910390f35b61022760048036038101906102229190613424565b610ae6565b005b610231610bd5565b60405161023e919061359e565b60405180910390f35b61024f610bfb565b60405161025c91906135b9565b60405180910390f35b61027f600480360381019061027a9190613383565b610c99565b60405161028c91906136d9565b60405180910390f35b6102af60048036038101906102aa9190613383565b610ccc565b6040516102bc91906136a3565b60405180910390f35b6102df60048036038101906102da919061313d565b610cff565b6040516102ec91906135b9565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461034f57600080fd5b80600360008460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa882826040516103d892919061374b565b60405180910390a15050565b6000806000806002600087876040516103fe929190613585565b6040518091039020815260200190815260200160002060008861ffff1661ffff16815260200190815260200160002090508060000160009054906101000a900463ffffffff168160000160049054906101000a900467ffffffffffffffff1682600001600c9054906101000a900460601b9350935093505093509350939050565b6000600260008680519060200120815260200190815260200160002060008761ffff1661ffff16815260200190815260200160002060000160009054906101000a900463ffffffff1690506104d2612cfb565b6104dc8584610d13565b90506104e9818784610dd0565b6104f1612cfb565b60008560000151511115610517576105098585610d13565b9050610516818885610dd0565b5b61051f612d6e565b61052883610e1d565b9050600060fe82602001511660ff161461054157600080fd5b610555602782610e6790919063ffffffff16565b15801561058e5750610571600282610e6790919063ffffffff16565b158061058d575061058c600682610e6790919063ffffffff16565b5b5b61059757600080fd5b6105a8898985610120015184610e81565b1561064157600260008980519060200120815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549067ffffffffffffffff021916905560008201600c6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050610700565b61066189898561012001518486610120015161065c88610e1d565b610ebb565b156106fa57600260008980519060200120815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549067ffffffffffffffff021916905560008201600c6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550506106ff565b600080fd5b5b505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461076557600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080357600080fd5b80600460008460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c7828260405161088c92919061374b565b60405180910390a15050565b6108a0612cfb565b6108aa8383610d13565b9050602f61ffff16816000015161ffff16146108c557600080fd5b6000600260008680519060200120815260200190815260200160002060008761ffff1661ffff16815260200190815260200160002060000160009054906101000a900463ffffffff168260a001510360030b121561092257600080fd5b61092a612db1565b61093382610fe2565b905061093e81611001565b6109e957610953818361012001518789611017565b600260008680519060200120815260200190815260200160002060008761ffff1661ffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549067ffffffffffffffff021916905560008201600c6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050506109ef565b50600080fd5b50505050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600060608390505b8451821015610adb57610a43612dfc565b610a7160028401610a5d858961122590919063ffffffff16565b61ffff168861124b9092919063ffffffff16565b816000018190525060028160000151510183019250610ab460028401610aa0858961122590919063ffffffff16565b61ffff168861124b9092919063ffffffff16565b816020018190525060028160200151510183019250610ad381836112d5565b915050610a32565b809250505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b4057600080fd5b80600560008460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d8282604051610bc992919061374b565b60405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c915780601f10610c6657610100808354040283529160200191610c91565b820191906000526020600020905b815481529060010190602001808311610c7457829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610d0b83836112d5565b905092915050565b610d1b612cfb565b610d2883600001516114e8565b9050610d388160e0015183611652565b610d4157600080fd5b6060610d518283600001516116f1565b9050816040015160ff16610d6f6000836117c890919063ffffffff16565b14610d7957600080fd5b80826101200181905250600042836080015163ffffffff160360030b1215610da057600080fd5b60008260a0015163ffffffff16420360030b1215610dbd57600080fd5b610dc981838686611828565b5092915050565b6000818460a001510360030b1215610de757600080fd5b603261ffff16836000015161ffff1614610e0057600080fd5b610e0f83610120015183611925565b610e1857600080fd5b505050565b610e25612d6e565b610e2d612db1565b610e3683610fe2565b9050610e5f8160a001518260a001518360c001510383600001516119a69092919063ffffffff16565b915050919050565b6000610e798360a00151600084611af4565b905092915050565b6000610e8e828486611c07565b15610eae57610ea68583610e6790919063ffffffff16565b159050610eb3565b600090505b949350505050565b60008060fe83602001511660ff1614610ed357600080fd5b6000610ede86611c31565b90506000610eeb85611c31565b90506000806001610f0660008c611c6690919063ffffffff16565b0160ff1690505b8951811015610fcf5783610f3889610f3384858f51038f61124b9092919063ffffffff16565b611c8a565b1415610faa576000610f6187610f5c85868f51038f61124b9092919063ffffffff16565b611c8a565b90508660800151841015610f8d578381118015610f815750866080015181105b95505050505050610fd8565b83811180610f9e5750866080015181105b95505050505050610fd8565b8091506001610fc2828c611c6690919063ffffffff16565b0160ff1681019050610f0d565b50600093505050505b9695505050505050565b610fea612db1565b610ffa8261010001516000611d66565b9050919050565b6000816000015151826020015110159050919050565b60008460a0015190506000611039828760000151611d9090919063ffffffff16565b905060008660a001518760c0015103905081811161105657600080fd5b600061106b8787611deb90919063ffffffff16565b905060008114156110a057611091838501868a60000151611af49092919063ffffffff16565b1561109b57600080fd5b611107565b60606110bb85858b6000015161124b9092919063ffffffff16565b9050600082136110ca57600080fd5b60006110df828a611deb90919063ffffffff16565b12156111055760006110fa8289611deb90919063ffffffff16565b1261110457600080fd5b5b505b5050505050505050565b8060c0015181602001818152505080600001515181602001511061113457611222565b600061114882600001518360200151611d90565b826020015101905061116781836000015161122590919063ffffffff16565b826040019061ffff16908161ffff168152505060028101905061119781836000015161122590919063ffffffff16565b826060019061ffff16908161ffff16815250506002810190506111c7818360000151611f7a90919063ffffffff16565b826080019063ffffffff16908163ffffffff168152505060048101905060006111fd82846000015161122590919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b6000825160028301111561123857600080fd5b61ffff8260028501015116905092915050565b60608351828401111561125d57600080fd5b60608267ffffffffffffffff8111801561127657600080fd5b506040519080825280601f01601f1916602001820160405280156112a95781602001600182028036833780820191505090505b50905060008060208301915085602088010190506112c8828287611fa2565b8293505050509392505050565b60606112df612cfb565b6112e98484610d13565b90506000600260008361012001518051906020012081526020019081526020016000206000836000015161ffff1661ffff168152602001908152602001600020905060008160000160049054906101000a900467ffffffffffffffff1667ffffffffffffffff1611156113825760008160000160009054906101000a900463ffffffff168360a001510360030b121561138157600080fd5b5b60405180606001604052808360a0015163ffffffff1681526020014267ffffffffffffffff168152602001836101000151805190602001206bffffffffffffffffffffffff1916815250600260008461012001518051906020012081526020019081526020016000206000846000015161ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550604082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908360601c02179055509050507f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b8261012001518361010001516040516114d09291906135db565b60405180910390a18161010001519250505092915050565b6114f0612cfb565b61150460008361122590919063ffffffff16565b816000019061ffff16908161ffff168152505061152b600283611c6690919063ffffffff16565b816020019060ff16908160ff1681525050611550600383611c6690919063ffffffff16565b816040019060ff16908160ff1681525050611575600483611f7a90919063ffffffff16565b816060019063ffffffff16908163ffffffff16815250506115a0600883611f7a90919063ffffffff16565b816080019063ffffffff16908163ffffffff16815250506115cb600c83611f7a90919063ffffffff16565b8160a0019063ffffffff16908163ffffffff16815250506115f660108361122590919063ffffffff16565b8160c0019061ffff16908161ffff1681525050611614826012611feb565b8160e001819052506116448160e00151516012018260e00151516012855103038461124b9092919063ffffffff16565b816101000181905250919050565b60008061167b61166c600085611d9090919063ffffffff16565b8461122590919063ffffffff16565b905082805190602001206bffffffffffffffffffffffff1916600260008680519060200120815260200190815260200160002060008361ffff1661ffff168152602001908152602001600020600001600c9054906101000a900460601b6bffffffffffffffffffffffff19161491505092915050565b60606116fb612db1565b61170484610fe2565b90505b61171081611001565b6117c157600161ffff16816060015161ffff161461172d57600080fd5b6000825114156117475761174081612019565b915061179b565b61176281602001518260000151611d9090919063ffffffff16565b82511461176e57600080fd5b61179160008260000151836020015185518661205090949392919063ffffffff16565b61179a57600080fd5b5b8261ffff16816040015161ffff16146117b357600080fd5b6117bc81611111565b611707565b5092915050565b600080600090505b60011561181e57835183106117e157fe5b60006117f68486611c6690919063ffffffff16565b60ff16905060018101840193506000811415611812575061181e565b600182019150506117d0565b8091505092915050565b83518360e0015151111561183b57600080fd5b61185f6000858560e00151518751038660e00151612074909392919063ffffffff16565b61186857600080fd5b611870612db1565b611884600083611d6690919063ffffffff16565b9050602b61ffff16816040015161ffff1614156118b4576118a684848361209d565b6118af57600080fd5b61191e565b603061ffff16816040015161ffff1614156118e2576118d4848483612153565b6118dd57600080fd5b61191d565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611914906136f4565b60405180910390fd5b5b5050505050565b600080600161193e600086611c6690919063ffffffff16565b0160ff16905060005b83518110156119995761196781868487612074909392919063ffffffff16565b15611977576001925050506119a0565b600161198c8286611c6690919063ffffffff16565b0160ff1681019050611947565b6000925050505b92915050565b6119ae612d6e565b600082840190506119cb6000850186611c6690919063ffffffff16565b826000019060ff16908160ff16815250506119f26001850186611c6690919063ffffffff16565b826020019060ff16908160ff1681525050611a19600285018661122590919063ffffffff16565b826040019061ffff16908161ffff16815250506000611a446004860187611c6690919063ffffffff16565b9050600585019450611a64858260ff168861124b9092919063ffffffff16565b83606001819052508060ff16850194506000611a898688611c6690919063ffffffff16565b905060208160ff161115611a9c57600080fd5b600186019550611aba868260ff16896122159092919063ffffffff16565b8460800181815250508060ff1686019550611ae2868785038961124b9092919063ffffffff16565b8460a001819052505050509392505050565b60008060088361ffff16901c90506000600860ff851661ffff1681611b1557fe5b04905060006007851660070360ff16600160ff16901b905060008690505b8751811015611bf7576000611b51828a611c6690919063ffffffff16565b90506000611b6b600184018b611c6690919063ffffffff16565b90508160ff168660ff161015611b8a5760009650505050505050611c00565b8160ff168660ff161415611be5578460ff168160ff1611611bb45760009650505050505050611c00565b600084611bd260028860ff168701018d611c6690919063ffffffff16565b1660ff1614159650505050505050611c00565b6002810160ff16830192505050611b33565b50600093505050505b9392505050565b600080611c148584611c8a565b90506000611c2185611c31565b9050808214925050509392505050565b6000611c5f6001611c4c600085611c6690919063ffffffff16565b60ff16846122549092919063ffffffff16565b9050919050565b6000828281518110611c7457fe5b602001015160f81c60f81b60f81c905092915050565b600060056000846000015160ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368f9dab284606001518486604001516040518463ffffffff1660e01b8152600401611d0e9392919061365e565b60206040518083038186803b158015611d2657600080fd5b505afa158015611d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5e91906130a8565b905092915050565b611d6e612db1565b828160000181905250818160c0018181525050611d8a81611111565b92915050565b6000808290505b600115611ddf5783518110611da857fe5b6000611dbd8286611c6690919063ffffffff16565b60ff16905060018101820191506000811415611dd95750611ddf565b50611d97565b82810391505092915050565b6000611e00828461248190919063ffffffff16565b15611e0e5760009050611f74565b6000806000806000611e218860006117c8565b90506000611e308860006117c8565b90505b80821115611e5857859350611e4889876124a8565b9550818060019003925050611e33565b5b81811115611e7e57849250611e6e88866124a8565b9450808060019003915050611e59565b5b600082118015611ea35750611ea18689878c612074909392919063ffffffff16565b155b15611ed157859350611eb589876124a8565b9550849250611ec488866124a8565b9450600182039150611e7f565b6000861415611f08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9650505050505050611f74565b6000851415611f205760019650505050505050611f74565b611f6b60018501611f3a868c611c6690919063ffffffff16565b60ff168a60018701611f55888e611c6690919063ffffffff16565b60ff168e6124cd9095949392919063ffffffff16565b96505050505050505b92915050565b60008251600483011115611f8d57600080fd5b63ffffffff8260048501015116905092915050565b5b60208110611fc65781518352602083019250602082019150602081039050611fa3565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60606000611ff98484611d90565b905061201083828661124b9092919063ffffffff16565b91505092915050565b6060612049826020015161203584600001518560200151611d90565b846000015161124b9092919063ffffffff16565b9050919050565b600061205d8484846125a8565b6120688787856125a8565b14905095945050505050565b60006120848383848651036125a8565b6120928686878951036125a8565b149050949350505050565b60006120a7612db1565b6120b085610fe2565b90505b6120bc81611001565b61214657603061ffff16816040015161ffff16146120d957600080fd5b60606120e4826125cb565b90506120ee612e16565b61210560008351846125fb9092919063ffffffff16565b9050612113818389896126a4565b156121365761212c61212484612019565b868385612803565b935050505061214c565b505061214181611111565b6120b3565b50600090505b9392505050565b60006121748460e0015161216684612019565b61248190919063ffffffff16565b61217d57600080fd5b5b61218782611001565b61220d576121aa8460e0015161219c84612019565b61248190919063ffffffff16565b6121b357600080fd5b60606121be836125cb565b90506121c8612e16565b6121df60008351846125fb9092919063ffffffff16565b90506121ed818388886126a4565b156121fd5760019250505061220e565b505061220882611111565b61217e565b5b9392505050565b6000602082111561222557600080fd5b8351828401111561223557600080fd5b6001826020036101000a03198084602087010151169150509392505050565b6000603482111561226457600080fd5b60008080600090505b84811015612370576000878288018151811061228557fe5b602001015160f81c60f81b9050603060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101580156122ee5750607a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b6122f757600080fd5b604051806080016040528060478152602001613a826047913960308260f81c60ff16038151811061232457fe5b602001015160f81c60f81b60f81c925060208360ff16111561234557600080fd5b600186038214156123565750612370565b8260ff16600585901b17935050808060010191505061226d565b50600060058502905060006008868161238557fe5b06141561239d578160ff16600584901b17925061246a565b6002600886816123a957fe5b0614156123ce5760028260ff16901c60ff16600384901b179250600281039050612469565b6004600886816123da57fe5b0614156123ff5760048260ff16901c60ff16600184901b179250600481039050612468565b60056008868161240b57fe5b0614156124305760018260ff16901c60ff16600484901b179250600181039050612467565b60076008868161243c57fe5b0614156124615760038260ff16901c60ff16600284901b179250600381039050612466565b600080fd5b5b5b5b5b806101000383901b60001b93505050509392505050565b6000815183511480156124a0575061249f8360008460008751612050565b5b905092915050565b60006124bd8284611c6690919063ffffffff16565b60ff166001830101905092915050565b600080859050858310156124df578290505b600080602089018a019150602086018701905060005b8381101561259457600080845191508351905080821461257b5760006020871115612542577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050612555565b600184886020030160080260020a031990505b60008183168285160390506000811461257857809850505050505050505061259e565b50505b60208501945060208401935050506020810190506124f5565b5084880393505050505b9695505050505050565b6000835182840111156125ba57600080fd5b818360208601012090509392505050565b60606125f48260a001518360a001518460c0015103846000015161124b9092919063ffffffff16565b9050919050565b612603612e16565b612619600084018561122590919063ffffffff16565b816000019061ffff16908161ffff16815250506126426002840185611c6690919063ffffffff16565b816020019060ff16908160ff16815250506126696003840185611c6690919063ffffffff16565b816040019060ff16908160ff168152505061269560048401600484038661124b9092919063ffffffff16565b81606001819052509392505050565b60006003856020015160ff16146126be57600090506127fb565b826020015160ff16856040015160ff16146126dc57600090506127fb565b60006126e785612924565b90508360c0015161ffff168161ffff16146127065760009150506127fb565b6000610100876000015161ffff161614156127255760009150506127fb565b60036000876040015160ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de8f50a186856000015186602001516040518463ffffffff1660e01b81526004016127a793929190613612565b60206040518083038186803b1580156127bf57600080fd5b505afa1580156127d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f7919061307f565b9150505b949350505050565b60008061280f83612924565b90505b61281b85611001565b61291657606061282a866125cb565b9050612834612e48565b61285b8760a001518860a001518960c0015103896000015161299d9092919063ffffffff16565b90508261ffff16816000015161ffff1614612877575050612908565b856040015160ff16816020015160ff1614612893575050612908565b61289b612e7a565b6128b286518a510182612a4690919063ffffffff16565b506128c68982612a9a90919063ffffffff16565b506128da8682612a9a90919063ffffffff16565b506128f2826040015182600001518460600151612abc565b1561290457600194505050505061291c565b5050505b61291185611111565b612812565b60009150505b949350505050565b60008060005b835181101561298d5760006001821614612959576129518185611c6690919063ffffffff16565b60ff16612978565b600861296e8286611c6690919063ffffffff16565b60ff1661ffff16901b5b61ffff1682019150808060010191505061292a565b50601081901c8101915050919050565b6129a5612e48565b6129bb600084018561122590919063ffffffff16565b816000019061ffff16908161ffff16815250506129e46002840185611c6690919063ffffffff16565b816020019060ff16908160ff1681525050612a0b6003840185611c6690919063ffffffff16565b816040019060ff16908160ff1681525050612a3760048401600484038661124b9092919063ffffffff16565b81606001819052509392505050565b612a4e612e7a565b600060208381612a5a57fe5b0614612a735760208281612a6a57fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b612aa2612e7a565b612ab483846000015151848551612c02565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600460008660ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b345760009050612bfb565b600460008560ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7e83aee84846040518363ffffffff1660e01b8152600401612ba89291906135db565b60206040518083038186803b158015612bc057600080fd5b505afa158015612bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf8919061307f565b90505b9392505050565b612c0a612e7a565b8251821115612c1857600080fd5b84602001518285011115612c4357612c42856002612c3c8860200151888701612cbb565b02612cd7565b5b600080865180518760208301019350808887011115612c625787860182525b60208701925050505b60208410612c8e5780518252602082019150602081019050602084039350612c6b565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b600081831115612ccd57829050612cd1565b8190505b92915050565b606082600001519050612cea8383612a46565b50612cf58382612a9a565b50505050565b604051806101400160405280600061ffff168152602001600060ff168152602001600060ff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b6040518060c00160405280600060ff168152602001600060ff168152602001600061ffff1681526020016060815260200160008019168152602001606081525090565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b604051806040016040528060608152602001606081525090565b6040518060800160405280600061ffff168152602001600060ff168152602001600060ff168152602001606081525090565b6040518060800160405280600061ffff168152602001600060ff168152602001600060ff168152602001606081525090565b604051806040016040528060608152602001600081525090565b600081359050612ea3816139c9565b92915050565b600081519050612eb8816139e0565b92915050565b600081519050612ecd816139f7565b92915050565b60008083601f840112612ee557600080fd5b8235905067ffffffffffffffff811115612efe57600080fd5b602083019150836001820283011115612f1657600080fd5b9250929050565b600082601f830112612f2e57600080fd5b8135612f41612f3c826137a5565b613774565b91508082526020830160208301858383011115612f5d57600080fd5b612f68838284613974565b50505092915050565b600081359050612f8081613a0e565b92915050565b600081359050612f9581613a25565b92915050565b600081359050612faa81613a3c565b92915050565b600060408284031215612fc257600080fd5b612fcc6040613774565b9050600082013567ffffffffffffffff811115612fe857600080fd5b612ff484828501612f1d565b600083015250602082013567ffffffffffffffff81111561301457600080fd5b61302084828501612f1d565b60208301525092915050565b60008135905061303b81613a53565b92915050565b60008135905061305081613a6a565b92915050565b60006020828403121561306857600080fd5b600061307684828501612e94565b91505092915050565b60006020828403121561309157600080fd5b600061309f84828501612ea9565b91505092915050565b6000602082840312156130ba57600080fd5b60006130c884828501612ebe565b91505092915050565b600080604083850312156130e457600080fd5b600083013567ffffffffffffffff8111156130fe57600080fd5b61310a85828601612f1d565b925050602083013567ffffffffffffffff81111561312757600080fd5b61313385828601612f1d565b9150509250929050565b6000806040838503121561315057600080fd5b600083013567ffffffffffffffff81111561316a57600080fd5b61317685828601612fb0565b925050602083013567ffffffffffffffff81111561319357600080fd5b61319f85828601612f1d565b9150509250929050565b6000806000604084860312156131be57600080fd5b60006131cc8682870161302c565b935050602084013567ffffffffffffffff8111156131e957600080fd5b6131f586828701612ed3565b92509250509250925092565b6000806000806080858703121561321757600080fd5b60006132258782880161302c565b945050602085013567ffffffffffffffff81111561324257600080fd5b61324e87828801612f1d565b935050604085013567ffffffffffffffff81111561326b57600080fd5b61327787828801612fb0565b925050606085013567ffffffffffffffff81111561329457600080fd5b6132a087828801612f1d565b91505092959194509250565b600080600080600060a086880312156132c457600080fd5b60006132d28882890161302c565b955050602086013567ffffffffffffffff8111156132ef57600080fd5b6132fb88828901612f1d565b945050604086013567ffffffffffffffff81111561331857600080fd5b61332488828901612fb0565b935050606086013567ffffffffffffffff81111561334157600080fd5b61334d88828901612fb0565b925050608086013567ffffffffffffffff81111561336a57600080fd5b61337688828901612f1d565b9150509295509295909350565b60006020828403121561339557600080fd5b60006133a384828501613041565b91505092915050565b600080604083850312156133bf57600080fd5b60006133cd85828601613041565b92505060206133de85828601612f71565b9150509250929050565b600080604083850312156133fb57600080fd5b600061340985828601613041565b925050602061341a85828601612f86565b9150509250929050565b6000806040838503121561343757600080fd5b600061344585828601613041565b925050602061345685828601612f9b565b9150509250929050565b6134698161380d565b82525050565b6134788161382b565b82525050565b600061348a83856137f1565b9350613497838584613974565b82840190509392505050565b60006134ae826137d5565b6134b881856137e0565b93506134c8818560208601613983565b6134d1816139b8565b840191505092915050565b6134e5816138f6565b82525050565b6134f48161391a565b82525050565b6135038161393e565b82525050565b60006135166014836137fc565b91507f4e6f2076616c69642070726f6f6620666f756e640000000000000000000000006000830152602082019050919050565b61355281613962565b82525050565b613561816138c5565b82525050565b613570816138d5565b82525050565b61357f816138e9565b82525050565b600061359282848661347e565b91508190509392505050565b60006020820190506135b36000830184613460565b92915050565b600060208201905081810360008301526135d381846134a3565b905092915050565b600060408201905081810360008301526135f581856134a3565b9050818103602083015261360981846134a3565b90509392505050565b6000606082019050818103600083015261362c81866134a3565b9050818103602083015261364081856134a3565b9050818103604083015261365481846134a3565b9050949350505050565b6000606082019050818103600083015261367881866134a3565b9050818103602083015261368c81856134a3565b905061369b6040830184613549565b949350505050565b60006020820190506136b860008301846134dc565b92915050565b60006020820190506136d360008301846134eb565b92915050565b60006020820190506136ee60008301846134fa565b92915050565b6000602082019050818103600083015261370d81613509565b9050919050565b60006060820190506137296000830186613558565b6137366020830185613567565b613743604083018461346f565b949350505050565b60006040820190506137606000830185613576565b61376d6020830184613460565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561379b5761379a6139b6565b5b8060405250919050565b600067ffffffffffffffff8211156137c0576137bf6139b6565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613818826138a5565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b600061386c8261380d565b9050919050565b600061387e8261380d565b9050919050565b60006138908261380d565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061390182613908565b9050919050565b6000613913826138a5565b9050919050565b60006139258261392c565b9050919050565b6000613937826138a5565b9050919050565b600061394982613950565b9050919050565b600061395b826138a5565b9050919050565b600061396d82613897565b9050919050565b82818337600083830152505050565b60005b838110156139a1578082015181840152602081019050613986565b838111156139b0576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b6139d28161380d565b81146139dd57600080fd5b50565b6139e98161381f565b81146139f457600080fd5b50565b613a0081613857565b8114613a0b57600080fd5b50565b613a1781613861565b8114613a2257600080fd5b50565b613a2e81613873565b8114613a3957600080fd5b50565b613a4581613885565b8114613a5057600080fd5b50565b613a5c81613897565b8114613a6757600080fd5b50565b613a73816138e9565b8114613a7e57600080fd5b5056fe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa26469706673582212200216645409792671f8799f90a91efe98143ca44c41d86ddbe5ca89906d1f857964736f6c63430007040033",
  "immutableReferences": {},
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:5555:22",
        "statements": [
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "79:394:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "128:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "137:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "140:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "130:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "130:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "130:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "107:6:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "115:4:22",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "103:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "103:17:22"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "122:3:22"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "99:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "99:27:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "92:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "92:35:22"
                  },
                  "nodeType": "YulIf",
                  "src": "89:2:22"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "153:27:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "173:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "167:5:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "167:13:22"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "157:6:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "189:73:22",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "254:6:22"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "213:40:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "213:48:22"
                      }
                    ],
                    "functionName": {
                      "name": "allocateMemory",
                      "nodeType": "YulIdentifier",
                      "src": "198:14:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "198:64:22"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "189:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "278:5:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "285:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "271:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "271:21:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "271:21:22"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "301:28:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "316:6:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "324:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "312:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "312:17:22"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "305:3:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "338:27:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "353:5:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "360:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "349:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "349:16:22"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "342:3:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "403:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "412:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "415:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "405:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "405:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "405:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "384:3:22"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "389:6:22"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "380:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "380:16:22"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "398:3:22"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "377:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "377:25:22"
                  },
                  "nodeType": "YulIf",
                  "src": "374:2:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "450:3:22"
                      },
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "455:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "460:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "428:21:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "428:39:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "428:39:22"
                }
              ]
            },
            "name": "abi_decode_t_bytes_memory_ptr_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "57:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "65:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "73:5:22",
                "type": ""
              }
            ],
            "src": "7:466:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "565:300:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "611:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "620:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "623:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "613:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "613:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "613:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "586:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "595:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "582:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "582:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "607:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "578:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "578:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "575:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "637:221:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "651:38:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "675:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "686:1:22",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "671:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "671:17:22"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "665:5:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "665:24:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "655:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "736:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "745:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "748:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "738:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "738:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "738:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "708:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "716:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "705:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "705:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "702:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "765:83:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "820:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "831:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "816:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "816:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "840:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_memory_ptr_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "775:40:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "775:73:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "765:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_memory_ptr_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "535:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "546:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "558:6:22",
                "type": ""
              }
            ],
            "src": "479:386:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "980:845:22",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "990:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1013:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "sload",
                      "nodeType": "YulIdentifier",
                      "src": "1007:5:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1007:12:22"
                  },
                  "variables": [
                    {
                      "name": "slotValue",
                      "nodeType": "YulTypedName",
                      "src": "994:9:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1068:273:22",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "1114:42:22",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "slotValue",
                                      "nodeType": "YulIdentifier",
                                      "src": "1136:9:22"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "1147:1:22",
                                      "type": "",
                                      "value": "2"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "div",
                                    "nodeType": "YulIdentifier",
                                    "src": "1132:3:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1132:17:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1151:4:22",
                                  "type": "",
                                  "value": "0x7f"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "1128:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1128:28:22"
                            },
                            "variables": [
                              {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "1118:6:22",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "1169:77:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "1234:3:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "1239:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
                                "nodeType": "YulIdentifier",
                                "src": "1176:57:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1176:70:22"
                            },
                            "variableNames": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "1169:3:22"
                              }
                            ]
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "1266:3:22"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "slotValue",
                                      "nodeType": "YulIdentifier",
                                      "src": "1275:9:22"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1290:4:22",
                                          "type": "",
                                          "value": "0xff"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "not",
                                        "nodeType": "YulIdentifier",
                                        "src": "1286:3:22"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1286:9:22"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "and",
                                    "nodeType": "YulIdentifier",
                                    "src": "1271:3:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1271:25:22"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "1259:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1259:38:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1259:38:22"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "1310:21:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "1321:3:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1326:4:22",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1317:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1317:14:22"
                            },
                            "variableNames": [
                              {
                                "name": "ret",
                                "nodeType": "YulIdentifier",
                                "src": "1310:3:22"
                              }
                            ]
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "1061:280:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1066:1:22",
                        "type": "",
                        "value": "0"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1357:462:22",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "1402:31:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "slotValue",
                                  "nodeType": "YulIdentifier",
                                  "src": "1420:9:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1431:1:22",
                                  "type": "",
                                  "value": "2"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "1416:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1416:17:22"
                            },
                            "variables": [
                              {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "1406:6:22",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "1446:77:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "1511:3:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "1516:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
                                "nodeType": "YulIdentifier",
                                "src": "1453:57:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1453:70:22"
                            },
                            "variableNames": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "1446:3:22"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "1536:52:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1582:5:22"
                                }
                              ],
                              "functionName": {
                                "name": "array_dataslot_t_bytes_storage",
                                "nodeType": "YulIdentifier",
                                "src": "1551:30:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1551:37:22"
                            },
                            "variables": [
                              {
                                "name": "dataPos",
                                "nodeType": "YulTypedName",
                                "src": "1540:7:22",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "1601:10:22",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1610:1:22",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "1605:1:22",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "1668:110:22",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "pos",
                                            "nodeType": "YulIdentifier",
                                            "src": "1697:3:22"
                                          },
                                          {
                                            "name": "i",
                                            "nodeType": "YulIdentifier",
                                            "src": "1702:1:22"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1693:3:22"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1693:11:22"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "dataPos",
                                            "nodeType": "YulIdentifier",
                                            "src": "1712:7:22"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "1706:5:22"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1706:14:22"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "1686:6:22"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1686:35:22"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "1686:35:22"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "1738:26:22",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dataPos",
                                        "nodeType": "YulIdentifier",
                                        "src": "1753:7:22"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1762:1:22",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1749:3:22"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1749:15:22"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dataPos",
                                      "nodeType": "YulIdentifier",
                                      "src": "1738:7:22"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "1635:1:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "1638:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "1632:2:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1632:13:22"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "1646:21:22",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "1648:17:22",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1657:1:22"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1660:4:22",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1653:3:22"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1653:12:22"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "1648:1:22"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "1628:3:22",
                              "statements": []
                            },
                            "src": "1624:154:22"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "1791:18:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "1802:3:22"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "1807:1:22"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1798:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1798:11:22"
                            },
                            "variableNames": [
                              {
                                "name": "ret",
                                "nodeType": "YulIdentifier",
                                "src": "1791:3:22"
                              }
                            ]
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "1350:469:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1355:1:22",
                        "type": "",
                        "value": "1"
                      }
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "slotValue",
                        "nodeType": "YulIdentifier",
                        "src": "1039:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1050:1:22",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "1035:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1035:17:22"
                  },
                  "nodeType": "YulSwitch",
                  "src": "1028:791:22"
                }
              ]
            },
            "name": "abi_encode_t_bytes_storage_to_t_bytes_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "961:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "968:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "976:3:22",
                "type": ""
              }
            ],
            "src": "893:932:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1958:888:22",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1968:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1991:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "sload",
                      "nodeType": "YulIdentifier",
                      "src": "1985:5:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1985:12:22"
                  },
                  "variables": [
                    {
                      "name": "slotValue",
                      "nodeType": "YulTypedName",
                      "src": "1972:9:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2046:293:22",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "2092:42:22",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "slotValue",
                                      "nodeType": "YulIdentifier",
                                      "src": "2114:9:22"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "2125:1:22",
                                      "type": "",
                                      "value": "2"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "div",
                                    "nodeType": "YulIdentifier",
                                    "src": "2110:3:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "2110:17:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2129:4:22",
                                  "type": "",
                                  "value": "0x7f"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "2106:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2106:28:22"
                            },
                            "variables": [
                              {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "2096:6:22",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "2147:95:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "2230:3:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "2235:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                                "nodeType": "YulIdentifier",
                                "src": "2154:75:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2154:88:22"
                            },
                            "variableNames": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "2147:3:22"
                              }
                            ]
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "2262:3:22"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "slotValue",
                                      "nodeType": "YulIdentifier",
                                      "src": "2271:9:22"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2286:4:22",
                                          "type": "",
                                          "value": "0xff"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "not",
                                        "nodeType": "YulIdentifier",
                                        "src": "2282:3:22"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2282:9:22"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "and",
                                    "nodeType": "YulIdentifier",
                                    "src": "2267:3:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "2267:25:22"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "2255:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2255:38:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2255:38:22"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "2306:23:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "2317:3:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "2322:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "2313:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2313:16:22"
                            },
                            "variableNames": [
                              {
                                "name": "ret",
                                "nodeType": "YulIdentifier",
                                "src": "2306:3:22"
                              }
                            ]
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "2039:300:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2044:1:22",
                        "type": "",
                        "value": "0"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2355:485:22",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "2400:31:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "slotValue",
                                  "nodeType": "YulIdentifier",
                                  "src": "2418:9:22"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2429:1:22",
                                  "type": "",
                                  "value": "2"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2414:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2414:17:22"
                            },
                            "variables": [
                              {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "2404:6:22",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "2444:95:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "2527:3:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "2532:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                                "nodeType": "YulIdentifier",
                                "src": "2451:75:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2451:88:22"
                            },
                            "variableNames": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "2444:3:22"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "2552:52:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2598:5:22"
                                }
                              ],
                              "functionName": {
                                "name": "array_dataslot_t_bytes_storage",
                                "nodeType": "YulIdentifier",
                                "src": "2567:30:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2567:37:22"
                            },
                            "variables": [
                              {
                                "name": "dataPos",
                                "nodeType": "YulTypedName",
                                "src": "2556:7:22",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "2617:10:22",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2626:1:22",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "2621:1:22",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "2684:110:22",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "pos",
                                            "nodeType": "YulIdentifier",
                                            "src": "2713:3:22"
                                          },
                                          {
                                            "name": "i",
                                            "nodeType": "YulIdentifier",
                                            "src": "2718:1:22"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2709:3:22"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2709:11:22"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "dataPos",
                                            "nodeType": "YulIdentifier",
                                            "src": "2728:7:22"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "2722:5:22"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2722:14:22"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "2702:6:22"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2702:35:22"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "2702:35:22"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2754:26:22",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dataPos",
                                        "nodeType": "YulIdentifier",
                                        "src": "2769:7:22"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2778:1:22",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2765:3:22"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2765:15:22"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dataPos",
                                      "nodeType": "YulIdentifier",
                                      "src": "2754:7:22"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "2651:1:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "2654:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "2648:2:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2648:13:22"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "2662:21:22",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2664:17:22",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "2673:1:22"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2676:4:22",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2669:3:22"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2669:12:22"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "2664:1:22"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "2644:3:22",
                              "statements": []
                            },
                            "src": "2640:154:22"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "2807:23:22",
                            "value": {
                              "arguments": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "2818:3:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "2823:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "2814:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2814:16:22"
                            },
                            "variableNames": [
                              {
                                "name": "ret",
                                "nodeType": "YulIdentifier",
                                "src": "2807:3:22"
                              }
                            ]
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "2348:492:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2353:1:22",
                        "type": "",
                        "value": "1"
                      }
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "slotValue",
                        "nodeType": "YulIdentifier",
                        "src": "2017:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2028:1:22",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "2013:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2013:17:22"
                  },
                  "nodeType": "YulSwitch",
                  "src": "2006:834:22"
                }
              ]
            },
            "name": "abi_encode_t_bytes_storage_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1939:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "1946:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "1954:3:22",
                "type": ""
              }
            ],
            "src": "1853:993:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2997:214:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3007:72:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3072:3:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3077:1:22",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "3014:57:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3014:65:22"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "3007:3:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "3100:3:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3105:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3096:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3096:11:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3109:66:22",
                        "type": "",
                        "value": "0x0000000000000000000000000000000000000000000000000000000000000000"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3089:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3089:87:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3089:87:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3186:19:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3197:3:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3202:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3193:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3193:12:22"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "3186:3:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a_to_t_bytes_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "2985:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2993:3:22",
                "type": ""
              }
            ],
            "src": "2852:359:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3348:134:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3359:97:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3443:6:22"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3452:3:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_storage_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "3366:76:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3366:90:22"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "3359:3:22"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3466:10:22",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "3473:3:22"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "3466:3:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_storage__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3327:3:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3333:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "3344:3:22",
                "type": ""
              }
            ],
            "src": "3217:265:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3701:395:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3711:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3723:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3734:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3719:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3719:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3711:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3758:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3769:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3754:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3754:17:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "3777:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3783:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3773:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3773:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3747:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3747:47:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3747:47:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3803:138:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "3936:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "3811:123:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3811:130:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3803:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3962:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3973:2:22",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3958:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3958:18:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "3982:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3988:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3978:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3978:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3951:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3951:48:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3951:48:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4008:81:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "4075:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "4084:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_storage_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "4016:58:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4016:73:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4008:4:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a_t_bytes_storage__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3673:9:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3685:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3696:4:22",
                "type": ""
              }
            ],
            "src": "3488:608:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4142:238:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4152:19:22",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4168:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "4162:5:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4162:9:22"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "4152:6:22"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4180:35:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "4202:6:22"
                      },
                      {
                        "name": "size",
                        "nodeType": "YulIdentifier",
                        "src": "4210:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4198:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4198:17:22"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "4184:10:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4326:17:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error",
                            "nodeType": "YulIdentifier",
                            "src": "4328:11:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4328:13:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4328:13:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "4269:10:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4281:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "4266:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4266:34:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "4305:10:22"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "4317:6:22"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "4302:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4302:22:22"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "4263:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4263:62:22"
                  },
                  "nodeType": "YulIf",
                  "src": "4260:2:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4359:2:22",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "4363:10:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4352:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4352:22:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4352:22:22"
                }
              ]
            },
            "name": "allocateMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "4126:4:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "4135:6:22",
                "type": ""
              }
            ],
            "src": "4102:278:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4452:260:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4557:17:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error",
                            "nodeType": "YulIdentifier",
                            "src": "4559:11:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4559:13:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4559:13:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4529:6:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4537:18:22",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4526:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4526:30:22"
                  },
                  "nodeType": "YulIf",
                  "src": "4523:2:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4604:41:22",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "4620:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4628:4:22",
                            "type": "",
                            "value": "0x1f"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4616:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4616:17:22"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4639:4:22",
                            "type": "",
                            "value": "0x1f"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "4635:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4635:9:22"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "4612:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4612:33:22"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "4604:4:22"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4682:23:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "size",
                        "nodeType": "YulIdentifier",
                        "src": "4694:4:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4700:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4690:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4690:15:22"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "4682:4:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "4436:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "4447:4:22",
                "type": ""
              }
            ],
            "src": "4386:326:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4771:87:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4781:11:22",
                  "value": {
                    "name": "ptr",
                    "nodeType": "YulIdentifier",
                    "src": "4789:3:22"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "4781:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4809:1:22",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "name": "ptr",
                        "nodeType": "YulIdentifier",
                        "src": "4812:3:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4802:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4802:14:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4802:14:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4825:26:22",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4843:1:22",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4846:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "keccak256",
                      "nodeType": "YulIdentifier",
                      "src": "4833:9:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4833:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "4825:4:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_dataslot_t_bytes_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "ptr",
                "nodeType": "YulTypedName",
                "src": "4758:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "4766:4:22",
                "type": ""
              }
            ],
            "src": "4718:140:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4959:73:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "4976:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4981:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4969:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4969:19:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4969:19:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4997:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "5016:3:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5021:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5012:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5012:14:22"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "4997:11:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "4931:3:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "4936:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "4947:11:22",
                "type": ""
              }
            ],
            "src": "4864:168:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5151:34:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5161:18:22",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "5176:3:22"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "5161:11:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "5123:3:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "5128:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "5139:11:22",
                "type": ""
              }
            ],
            "src": "5038:147:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5240:258:22",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5250:10:22",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "5259:1:22",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "5254:1:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5319:63:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "5344:3:22"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "5349:1:22"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "5340:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5340:11:22"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "5363:3:22"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "5368:1:22"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "5359:3:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "5359:11:22"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "5353:5:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5353:18:22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "5333:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5333:39:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5333:39:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "5280:1:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "5283:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "5277:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5277:13:22"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "5291:19:22",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5293:15:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "5302:1:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5305:2:22",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "5298:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5298:10:22"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "5293:1:22"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "5273:3:22",
                    "statements": []
                  },
                  "src": "5269:113:22"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5416:76:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "5466:3:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "5471:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "5462:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5462:16:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5480:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "5455:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5455:27:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5455:27:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "5397:1:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "5400:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5394:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5394:13:22"
                  },
                  "nodeType": "YulIf",
                  "src": "5391:2:22"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "5222:3:22",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "5227:3:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "5232:6:22",
                "type": ""
              }
            ],
            "src": "5191:307:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5527:25:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "functionName": {
                      "name": "invalid",
                      "nodeType": "YulIdentifier",
                      "src": "5537:7:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5537:9:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5537:9:22"
                }
              ]
            },
            "name": "panic_error",
            "nodeType": "YulFunctionDefinition",
            "src": "5504:48:22"
          }
        ]
      },
      "contents": "{\n\n    function abi_decode_t_bytes_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := mload(offset)\n        array := allocateMemory(array_allocation_size_t_bytes_memory_ptr(length))\n        mstore(array, length)\n        let src := add(offset, 0x20)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert(0, 0) }\n        copy_memory_to_memory(src, dst, length)\n    }\n\n    function abi_decode_tuple_t_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n            let offset := mload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value0 := abi_decode_t_bytes_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    // bytes -> bytes\n    function abi_encode_t_bytes_storage_to_t_bytes_memory_ptr_fromStack(value, pos) -> ret {\n        let slotValue := sload(value)\n        switch and(slotValue, 1)\n        case 0 {\n            // short byte array\n            let length := and(div(slotValue, 2), 0x7f)\n            pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n            mstore(pos, and(slotValue, not(0xff)))\n            ret := add(pos, 0x20)\n        }\n        case 1 {\n            // long byte array\n            let length := div(slotValue, 2)\n            pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n            let dataPos := array_dataslot_t_bytes_storage(value)\n            let i := 0\n            for { } lt(i, length) { i := add(i, 0x20) } {\n                mstore(add(pos, i), sload(dataPos))\n                dataPos := add(dataPos, 1)\n            }\n            ret := add(pos, i)\n        }\n    }\n\n    // bytes -> bytes\n    function abi_encode_t_bytes_storage_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> ret {\n        let slotValue := sload(value)\n        switch and(slotValue, 1)\n        case 0 {\n            // short byte array\n            let length := and(div(slotValue, 2), 0x7f)\n            pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n            mstore(pos, and(slotValue, not(0xff)))\n            ret := add(pos, length)\n        }\n        case 1 {\n            // long byte array\n            let length := div(slotValue, 2)\n            pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n            let dataPos := array_dataslot_t_bytes_storage(value)\n            let i := 0\n            for { } lt(i, length) { i := add(i, 0x20) } {\n                mstore(add(pos, i), sload(dataPos))\n                dataPos := add(dataPos, 1)\n            }\n            ret := add(pos, length)\n        }\n    }\n\n    function abi_encode_t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a_to_t_bytes_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, 1)\n\n        mstore(add(pos, 0), 0x0000000000000000000000000000000000000000000000000000000000000000)\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_storage__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_storage_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function abi_encode_tuple_t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a_t_bytes_storage__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 64)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a_to_t_bytes_memory_ptr_fromStack( tail)\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_bytes_storage_to_t_bytes_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function allocateMemory(size) -> memPtr {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error() }\n        mstore(64, newFreePtr)\n    }\n\n    function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error() }\n\n        // round up\n        size := and(add(length, 0x1f), not(0x1f))\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function array_dataslot_t_bytes_storage(ptr) -> data {\n        data := ptr\n\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function copy_memory_to_memory(src, dst, length) {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length)\n        {\n            // clear end\n            mstore(add(dst, length), 0)\n        }\n    }\n\n    function panic_error() {\n        invalid()\n    }\n\n}\n",
      "id": 22,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:21889:22",
        "statements": [
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:87:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "69:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "91:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "78:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "78:20:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "69:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "134:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "107:26:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "107:33:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "107:33:22"
                }
              ]
            },
            "name": "abi_decode_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "37:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "45:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "53:5:22",
                "type": ""
              }
            ],
            "src": "7:139:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "212:77:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "222:22:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "237:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "231:5:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "231:13:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "222:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "277:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_bool",
                      "nodeType": "YulIdentifier",
                      "src": "253:23:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "253:30:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "253:30:22"
                }
              ]
            },
            "name": "abi_decode_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "190:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "198:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "206:5:22",
                "type": ""
              }
            ],
            "src": "152:137:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "358:80:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "368:22:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "383:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "377:5:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "377:13:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "368:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "426:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_bytes32",
                      "nodeType": "YulIdentifier",
                      "src": "399:26:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "399:33:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "399:33:22"
                }
              ]
            },
            "name": "abi_decode_t_bytes32_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "336:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "344:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "352:5:22",
                "type": ""
              }
            ],
            "src": "295:143:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "531:277:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "580:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "589:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "592:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "582:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "582:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "582:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "559:6:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "567:4:22",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "555:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "555:17:22"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "574:3:22"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "551:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "551:27:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "544:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "544:35:22"
                  },
                  "nodeType": "YulIf",
                  "src": "541:2:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "605:30:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "628:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "615:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "615:20:22"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "605:6:22"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "678:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "687:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "690:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "680:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "680:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "680:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "650:6:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "658:18:22",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "647:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "647:30:22"
                  },
                  "nodeType": "YulIf",
                  "src": "644:2:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "703:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "719:6:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "727:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "715:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "715:17:22"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "703:8:22"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "786:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "795:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "798:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "788:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "788:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "788:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "arrayPos",
                            "nodeType": "YulIdentifier",
                            "src": "751:8:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "765:6:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "773:4:22",
                                "type": "",
                                "value": "0x01"
                              }
                            ],
                            "functionName": {
                              "name": "mul",
                              "nodeType": "YulIdentifier",
                              "src": "761:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "761:17:22"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "747:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "747:32:22"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "781:3:22"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "744:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "744:41:22"
                  },
                  "nodeType": "YulIf",
                  "src": "741:2:22"
                }
              ]
            },
            "name": "abi_decode_t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "498:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "506:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "514:8:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "524:6:22",
                "type": ""
              }
            ],
            "src": "457:351:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "875:403:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "924:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "933:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "936:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "926:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "926:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "926:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "903:6:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "911:4:22",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "899:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "899:17:22"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "918:3:22"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "895:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "895:27:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "888:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "888:35:22"
                  },
                  "nodeType": "YulIf",
                  "src": "885:2:22"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "949:34:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "976:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "963:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "963:20:22"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "953:6:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "992:73:22",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "1057:6:22"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "1016:40:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1016:48:22"
                      }
                    ],
                    "functionName": {
                      "name": "allocateMemory",
                      "nodeType": "YulIdentifier",
                      "src": "1001:14:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1001:64:22"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "992:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "1081:5:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1088:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1074:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1074:21:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1074:21:22"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1104:28:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1119:6:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1127:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1115:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1115:17:22"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "1108:3:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1141:27:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "1156:5:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1163:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1152:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1152:16:22"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "1145:3:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1206:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1215:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1218:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1208:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1208:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1208:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "1187:3:22"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "1192:6:22"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1183:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1183:16:22"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "1201:3:22"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1180:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1180:25:22"
                  },
                  "nodeType": "YulIf",
                  "src": "1177:2:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "1255:3:22"
                      },
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "1260:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1265:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "copy_calldata_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "1231:23:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1231:41:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1231:41:22"
                }
              ]
            },
            "name": "abi_decode_t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "853:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "861:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "869:5:22",
                "type": ""
              }
            ],
            "src": "814:464:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1354:105:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1364:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1386:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1373:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1373:20:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1364:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1447:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_contract$_Algorithm_$3863",
                      "nodeType": "YulIdentifier",
                      "src": "1402:44:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1402:51:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1402:51:22"
                }
              ]
            },
            "name": "abi_decode_t_contract$_Algorithm_$3863",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1332:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1340:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1348:5:22",
                "type": ""
              }
            ],
            "src": "1284:175:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1532:102:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1542:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1564:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1551:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1551:20:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1542:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1622:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_contract$_Digest_$5741",
                      "nodeType": "YulIdentifier",
                      "src": "1580:41:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1580:48:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1580:48:22"
                }
              ]
            },
            "name": "abi_decode_t_contract$_Digest_$5741",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1510:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1518:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1526:5:22",
                "type": ""
              }
            ],
            "src": "1465:169:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1712:107:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1722:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1744:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1731:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1731:20:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1722:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1807:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_contract$_NSEC3Digest_$5847",
                      "nodeType": "YulIdentifier",
                      "src": "1760:46:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1760:53:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1760:53:22"
                }
              ]
            },
            "name": "abi_decode_t_contract$_NSEC3Digest_$5847",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1690:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1698:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1706:5:22",
                "type": ""
              }
            ],
            "src": "1640:179:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1955:628:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1999:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2008:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2011:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2001:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2001:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2001:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "1976:3:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1981:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1972:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1972:19:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1993:4:22",
                        "type": "",
                        "value": "0x40"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1968:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1968:30:22"
                  },
                  "nodeType": "YulIf",
                  "src": "1965:2:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2024:29:22",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2048:4:22",
                        "type": "",
                        "value": "0x40"
                      }
                    ],
                    "functionName": {
                      "name": "allocateMemory",
                      "nodeType": "YulIdentifier",
                      "src": "2033:14:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2033:20:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2024:5:22"
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2063:252:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2099:45:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2130:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2141:1:22",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2126:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2126:17:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "2113:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2113:31:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2103:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2191:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2200:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2203:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "2193:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2193:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2193:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2163:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2171:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "2160:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2160:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "2157:2:22"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2231:5:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2238:4:22",
                                "type": "",
                                "value": "0x00"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2227:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2227:16:22"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2279:9:22"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2290:6:22"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2275:3:22"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2275:22:22"
                              },
                              {
                                "name": "end",
                                "nodeType": "YulIdentifier",
                                "src": "2299:3:22"
                              }
                            ],
                            "functionName": {
                              "name": "abi_decode_t_bytes_memory_ptr",
                              "nodeType": "YulIdentifier",
                              "src": "2245:29:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2245:58:22"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2220:6:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2220:84:22"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2220:84:22"
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2325:251:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2359:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2390:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2401:2:22",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2386:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2386:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "2373:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2373:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2363:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2452:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2461:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2464:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "2454:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2454:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2454:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2424:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2432:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "2421:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2421:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "2418:2:22"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2492:5:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2499:4:22",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2488:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2488:16:22"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2540:9:22"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2551:6:22"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2536:3:22"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2536:22:22"
                              },
                              {
                                "name": "end",
                                "nodeType": "YulIdentifier",
                                "src": "2560:3:22"
                              }
                            ],
                            "functionName": {
                              "name": "abi_decode_t_bytes_memory_ptr",
                              "nodeType": "YulIdentifier",
                              "src": "2506:29:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2506:58:22"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2481:6:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2481:84:22"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2481:84:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1930:9:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1941:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1949:5:22",
                "type": ""
              }
            ],
            "src": "1865:718:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2640:86:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2650:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2672:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2659:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2659:20:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2650:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2714:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint16",
                      "nodeType": "YulIdentifier",
                      "src": "2688:25:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2688:32:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2688:32:22"
                }
              ]
            },
            "name": "abi_decode_t_uint16",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2618:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2626:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2634:5:22",
                "type": ""
              }
            ],
            "src": "2589:137:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2782:85:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2792:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2814:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2801:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2801:20:22"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "2792:5:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2855:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "2830:24:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2830:31:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2830:31:22"
                }
              ]
            },
            "name": "abi_decode_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2760:6:22",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2768:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2776:5:22",
                "type": ""
              }
            ],
            "src": "2732:135:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2939:194:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2985:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2994:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2997:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2987:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2987:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2987:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2960:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2969:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2956:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2956:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2981:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2952:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2952:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "2949:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3011:115:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3025:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3039:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3029:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3053:63:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3088:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3099:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3084:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3084:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3108:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "3063:20:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3063:53:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "3053:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2909:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2920:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2932:6:22",
                "type": ""
              }
            ],
            "src": "2873:260:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3213:202:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3259:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3268:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3271:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3261:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3261:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3261:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3234:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3243:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3230:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3230:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3255:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3226:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3226:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "3223:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3285:123:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3299:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3313:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3303:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3327:71:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3370:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3381:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3366:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3366:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3390:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bool_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "3337:28:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3337:61:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "3327:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3183:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3194:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3206:6:22",
                "type": ""
              }
            ],
            "src": "3139:276:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3498:205:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3544:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3553:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3556:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3546:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3546:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3546:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3519:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3528:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3515:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3515:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3540:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3511:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3511:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "3508:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3570:126:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3584:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3598:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3588:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3612:74:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3658:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3669:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3654:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3654:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3678:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes32_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "3622:31:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3622:64:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "3612:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3468:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3479:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3491:6:22",
                "type": ""
              }
            ],
            "src": "3421:282:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3810:524:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3856:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3865:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3868:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3858:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3858:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3858:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3831:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3840:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3827:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3827:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3852:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3823:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3823:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "3820:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3882:217:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3896:45:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3927:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3938:1:22",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3923:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3923:17:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "3910:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3910:31:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3900:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "3988:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3997:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4000:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "3990:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3990:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "3990:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3960:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3968:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "3957:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3957:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "3954:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4017:72:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4061:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4072:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4057:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4057:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4081:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "4027:29:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4027:62:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "4017:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4109:218:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4123:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4154:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4165:2:22",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4150:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4150:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "4137:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4137:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4127:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "4216:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4225:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4228:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "4218:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4218:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "4218:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4188:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4196:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "4185:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4185:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "4182:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4245:72:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4289:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4300:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4285:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4285:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4309:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "4255:29:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4255:62:22"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "4245:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3772:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3783:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3795:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3803:6:22",
                "type": ""
              }
            ],
            "src": "3709:625:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4467:550:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4513:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4522:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4525:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4515:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4515:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4515:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4488:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4497:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4484:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4484:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4509:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4480:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4480:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "4477:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4539:243:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4553:45:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4584:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4595:1:22",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4580:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4580:17:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "4567:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4567:31:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4557:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "4645:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4654:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4657:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "4647:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4647:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "4647:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4617:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4625:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "4614:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4614:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "4611:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4674:98:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4744:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4755:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4740:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4740:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4764:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "4684:55:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4684:88:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "4674:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4792:218:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4806:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4837:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4848:2:22",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4833:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4833:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "4820:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4820:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4810:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "4899:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4908:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4911:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "4901:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4901:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "4901:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4871:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4879:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "4868:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4868:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "4865:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4928:72:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4972:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4983:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4968:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4968:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4992:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "4938:29:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4938:62:22"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "4928:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_struct$_RRSetWithSignature_$740_memory_ptrt_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4429:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4440:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4452:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4460:6:22",
                "type": ""
              }
            ],
            "src": "4340:677:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5124:431:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5170:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5179:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5182:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5172:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5172:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5172:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5145:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5154:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5141:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5141:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5166:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5137:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5137:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "5134:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5196:114:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5210:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5224:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5214:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5238:62:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5272:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5283:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5268:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5268:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5292:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint16",
                          "nodeType": "YulIdentifier",
                          "src": "5248:19:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5248:52:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "5238:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5320:228:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5334:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5365:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5376:2:22",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5361:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5361:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "5348:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5348:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5338:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "5427:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5436:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5439:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "5429:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5429:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "5429:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "5399:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5407:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "5396:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5396:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "5393:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5456:82:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5510:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5521:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5506:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5506:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5530:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_calldata_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "5474:31:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5474:64:22"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "5456:6:22"
                        },
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "5464:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint16t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5078:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5089:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5101:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5109:6:22",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5117:6:22",
                "type": ""
              }
            ],
            "src": "5023:532:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5730:904:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5777:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5786:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5789:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5779:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5779:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5779:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5751:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5760:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5747:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5747:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5772:3:22",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5743:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5743:33:22"
                  },
                  "nodeType": "YulIf",
                  "src": "5740:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5803:114:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5817:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5831:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5821:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5845:62:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5879:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5890:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5875:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5875:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5899:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint16",
                          "nodeType": "YulIdentifier",
                          "src": "5855:19:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5855:52:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "5845:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5927:218:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5941:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5972:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5983:2:22",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5968:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5968:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "5955:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5955:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5945:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "6034:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6043:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6046:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "6036:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6036:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "6036:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6006:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6014:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "6003:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6003:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "6000:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "6063:72:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6107:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "6118:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6103:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6103:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6127:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "6073:29:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6073:62:22"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "6063:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "6155:244:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "6169:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6200:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6211:2:22",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6196:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6196:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "6183:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6183:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "6173:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "6262:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6271:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6274:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "6264:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6264:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "6264:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6234:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6242:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "6231:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6231:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "6228:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "6291:98:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6361:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "6372:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6357:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6357:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6381:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "6301:55:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6301:88:22"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "6291:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "6409:218:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "6423:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6454:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6465:2:22",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6450:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6450:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "6437:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6437:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "6427:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "6516:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6525:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6528:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "6518:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6518:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "6518:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6488:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6496:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "6485:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6485:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "6482:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "6545:72:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "6589:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "6600:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6585:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6585:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6609:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "6555:29:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6555:62:22"
                      },
                      "variableNames": [
                        {
                          "name": "value3",
                          "nodeType": "YulIdentifier",
                          "src": "6545:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint16t_bytes_memory_ptrt_struct$_RRSetWithSignature_$740_memory_ptrt_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5676:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5687:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5699:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5707:6:22",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5715:6:22",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "5723:6:22",
                "type": ""
              }
            ],
            "src": "5561:1073:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6861:1159:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6908:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6917:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6920:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6910:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6910:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6910:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6882:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6891:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6878:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6878:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6903:3:22",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6874:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6874:33:22"
                  },
                  "nodeType": "YulIf",
                  "src": "6871:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "6934:114:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "6948:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6962:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "6952:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "6976:62:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7010:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "7021:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7006:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7006:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7030:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint16",
                          "nodeType": "YulIdentifier",
                          "src": "6986:19:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6986:52:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "6976:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "7058:218:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "7072:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7103:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7114:2:22",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7099:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7099:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "7086:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7086:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "7076:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "7165:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7174:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7177:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "7167:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7167:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "7167:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "7137:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7145:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "7134:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7134:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "7131:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "7194:72:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7238:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "7249:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7234:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7234:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7258:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "7204:29:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7204:62:22"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "7194:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "7286:244:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "7300:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7331:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7342:2:22",
                                "type": "",
                                "value": "64"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7327:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7327:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "7314:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7314:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "7304:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "7393:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7402:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7405:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "7395:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7395:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "7395:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "7365:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7373:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "7362:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7362:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "7359:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "7422:98:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7492:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "7503:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7488:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7488:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7512:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "7432:55:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7432:88:22"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "7422:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "7540:244:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "7554:46:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7585:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7596:2:22",
                                "type": "",
                                "value": "96"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7581:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7581:18:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "7568:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7568:32:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "7558:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "7647:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7656:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7659:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "7649:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7649:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "7649:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "7619:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7627:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "7616:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7616:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "7613:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "7676:98:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7746:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "7757:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7742:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7742:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7766:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "7686:55:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7686:88:22"
                      },
                      "variableNames": [
                        {
                          "name": "value3",
                          "nodeType": "YulIdentifier",
                          "src": "7676:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "7794:219:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "7808:47:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7839:9:22"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7850:3:22",
                                "type": "",
                                "value": "128"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7835:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7835:19:22"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "7822:12:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7822:33:22"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "7812:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "7902:16:22",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7911:1:22",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7914:1:22",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "7904:6:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7904:12:22"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "7904:12:22"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "7874:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7882:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "7871:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7871:30:22"
                      },
                      "nodeType": "YulIf",
                      "src": "7868:2:22"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "7931:72:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "7975:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "7986:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7971:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7971:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7995:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_bytes_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "7941:29:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7941:62:22"
                      },
                      "variableNames": [
                        {
                          "name": "value4",
                          "nodeType": "YulIdentifier",
                          "src": "7931:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint16t_bytes_memory_ptrt_struct$_RRSetWithSignature_$740_memory_ptrt_struct$_RRSetWithSignature_$740_memory_ptrt_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6799:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6810:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6822:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6830:6:22",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6838:6:22",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "6846:6:22",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "6854:6:22",
                "type": ""
              }
            ],
            "src": "6640:1380:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8090:192:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8136:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8145:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8148:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8138:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8138:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8138:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8111:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8120:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8107:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8107:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8132:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8103:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8103:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "8100:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "8162:113:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "8176:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8190:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "8180:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8204:61:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8237:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "8248:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8233:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8233:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8257:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint8",
                          "nodeType": "YulIdentifier",
                          "src": "8214:18:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8214:51:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "8204:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8060:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8071:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8083:6:22",
                "type": ""
              }
            ],
            "src": "8026:256:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8387:336:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8433:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8442:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8445:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8435:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8435:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8435:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8408:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8417:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8404:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8404:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8429:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8400:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8400:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "8397:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "8459:113:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "8473:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8487:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "8477:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8501:61:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8534:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "8545:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8530:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8530:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8554:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint8",
                          "nodeType": "YulIdentifier",
                          "src": "8511:18:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8511:51:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "8501:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "8582:134:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "8596:16:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8610:2:22",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "8600:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8625:81:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8678:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "8689:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8674:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8674:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8698:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_contract$_Algorithm_$3863",
                          "nodeType": "YulIdentifier",
                          "src": "8635:38:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8635:71:22"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "8625:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_contract$_Algorithm_$3863",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8349:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8360:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8372:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8380:6:22",
                "type": ""
              }
            ],
            "src": "8288:435:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8825:333:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8871:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8880:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8883:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8873:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8873:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8873:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8846:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8855:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8842:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8842:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8867:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8838:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8838:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "8835:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "8897:113:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "8911:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8925:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "8915:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "8939:61:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "8972:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "8983:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8968:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8968:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8992:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint8",
                          "nodeType": "YulIdentifier",
                          "src": "8949:18:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8949:51:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "8939:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "9020:131:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "9034:16:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9048:2:22",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "9038:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "9063:78:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9113:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "9124:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9109:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9109:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9133:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_contract$_Digest_$5741",
                          "nodeType": "YulIdentifier",
                          "src": "9073:35:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9073:68:22"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "9063:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_contract$_Digest_$5741",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8787:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8798:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8810:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8818:6:22",
                "type": ""
              }
            ],
            "src": "8729:429:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9265:338:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9311:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9320:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9323:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9313:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9313:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9313:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9286:7:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9295:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9282:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9282:23:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9307:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9278:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9278:32:22"
                  },
                  "nodeType": "YulIf",
                  "src": "9275:2:22"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "9337:113:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "9351:15:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9365:1:22",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "9355:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "9379:61:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9412:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "9423:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9408:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9408:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9432:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint8",
                          "nodeType": "YulIdentifier",
                          "src": "9389:18:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9389:51:22"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "9379:6:22"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "9460:136:22",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "9474:16:22",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9488:2:22",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "9478:6:22",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "9503:83:22",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "9558:9:22"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "9569:6:22"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "9554:3:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9554:22:22"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9578:7:22"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_contract$_NSEC3Digest_$5847",
                          "nodeType": "YulIdentifier",
                          "src": "9513:40:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9513:73:22"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "9503:6:22"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_contract$_NSEC3Digest_$5847",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9227:9:22",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "9238:7:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9250:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9258:6:22",
                "type": ""
              }
            ],
            "src": "9164:439:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9674:53:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9691:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "9714:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "9696:17:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9696:24:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9684:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9684:37:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9684:37:22"
                }
              ]
            },
            "name": "abi_encode_t_address_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "9662:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "9669:3:22",
                "type": ""
              }
            ],
            "src": "9609:118:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9798:53:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9815:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "9838:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_bytes20",
                          "nodeType": "YulIdentifier",
                          "src": "9820:17:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9820:24:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9808:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9808:37:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9808:37:22"
                }
              ]
            },
            "name": "abi_encode_t_bytes20_to_t_bytes20_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "9786:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "9793:3:22",
                "type": ""
              }
            ],
            "src": "9733:118:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9997:196:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10007:95:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10090:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "10095:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10014:75:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10014:88:22"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "10007:3:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "start",
                        "nodeType": "YulIdentifier",
                        "src": "10136:5:22"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10143:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "10148:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "copy_calldata_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "10112:23:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10112:43:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10112:43:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10164:23:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10175:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "10180:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10171:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10171:16:22"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "10164:3:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "start",
                "nodeType": "YulTypedName",
                "src": "9970:5:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "9977:6:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "9985:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "9993:3:22",
                "type": ""
              }
            ],
            "src": "9879:314:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10289:270:22",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "10299:52:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "10345:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "array_length_t_bytes_memory_ptr",
                      "nodeType": "YulIdentifier",
                      "src": "10313:31:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10313:38:22"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "10303:6:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10360:77:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10425:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "10430:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10367:57:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10367:70:22"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "10360:3:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "10472:5:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10479:4:22",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10468:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10468:16:22"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10486:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "10491:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "10446:21:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10446:52:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10446:52:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10507:46:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10518:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "10545:6:22"
                          }
                        ],
                        "functionName": {
                          "name": "round_up_to_mul_of_32",
                          "nodeType": "YulIdentifier",
                          "src": "10523:21:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10523:29:22"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10514:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10514:39:22"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "10507:3:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "10270:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "10277:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "10285:3:22",
                "type": ""
              }
            ],
            "src": "10199:360:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10648:84:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10665:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "10719:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "convert_t_contract$_Algorithm_$3863_to_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "10670:48:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10670:55:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10658:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10658:68:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10658:68:22"
                }
              ]
            },
            "name": "abi_encode_t_contract$_Algorithm_$3863_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "10636:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "10643:3:22",
                "type": ""
              }
            ],
            "src": "10565:167:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10818:81:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "10835:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "10886:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "convert_t_contract$_Digest_$5741_to_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "10840:45:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10840:52:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10828:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10828:65:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10828:65:22"
                }
              ]
            },
            "name": "abi_encode_t_contract$_Digest_$5741_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "10806:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "10813:3:22",
                "type": ""
              }
            ],
            "src": "10738:161:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10990:86:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11007:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "11063:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "convert_t_contract$_NSEC3Digest_$5847_to_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "11012:50:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11012:57:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11000:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11000:70:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11000:70:22"
                }
              ]
            },
            "name": "abi_encode_t_contract$_NSEC3Digest_$5847_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "10978:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "10985:3:22",
                "type": ""
              }
            ],
            "src": "10905:171:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11228:172:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11238:74:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11304:3:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11309:2:22",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "11245:58:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11245:67:22"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "11238:3:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "11333:3:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11338:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11329:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11329:11:22"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11342:22:22",
                        "type": "",
                        "value": "No valid proof found"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11322:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11322:43:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11322:43:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11375:19:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11386:3:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11391:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11382:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11382:12:22"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "11375:3:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11216:3:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "11224:3:22",
                "type": ""
              }
            ],
            "src": "11082:318:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11470:65:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11487:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "11522:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "convert_t_uint16_to_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "11492:29:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11492:36:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11480:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11480:49:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11480:49:22"
                }
              ]
            },
            "name": "abi_encode_t_uint16_to_t_uint256_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "11458:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11465:3:22",
                "type": ""
              }
            ],
            "src": "11406:129:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11604:52:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11621:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "11643:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_uint32",
                          "nodeType": "YulIdentifier",
                          "src": "11626:16:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11626:23:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11614:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11614:36:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11614:36:22"
                }
              ]
            },
            "name": "abi_encode_t_uint32_to_t_uint32_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "11592:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11599:3:22",
                "type": ""
              }
            ],
            "src": "11541:115:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11725:52:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11742:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "11764:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_uint64",
                          "nodeType": "YulIdentifier",
                          "src": "11747:16:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11747:23:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11735:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11735:36:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11735:36:22"
                }
              ]
            },
            "name": "abi_encode_t_uint64_to_t_uint64_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "11713:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11720:3:22",
                "type": ""
              }
            ],
            "src": "11662:115:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11844:51:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11861:3:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "11882:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_uint8",
                          "nodeType": "YulIdentifier",
                          "src": "11866:15:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11866:22:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11854:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11854:35:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11854:35:22"
                }
              ]
            },
            "name": "abi_encode_t_uint8_to_t_uint8_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "11832:5:22",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11839:3:22",
                "type": ""
              }
            ],
            "src": "11783:112:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12045:147:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "12056:110:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12145:6:22"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "12153:6:22"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "12162:3:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "12063:81:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12063:103:22"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "12056:3:22"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12176:10:22",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "12183:3:22"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "12176:3:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "12016:3:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "12022:6:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12030:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "12041:3:22",
                "type": ""
              }
            ],
            "src": "11901:291:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12296:124:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "12306:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12318:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12329:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12314:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12314:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12306:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12386:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12399:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12410:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12395:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12395:17:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "12342:43:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12342:71:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12342:71:22"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12268:9:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12280:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12291:4:22",
                "type": ""
              }
            ],
            "src": "12198:222:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12542:193:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "12552:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12564:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12575:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12560:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12560:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12552:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12599:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12610:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12595:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12595:17:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "12618:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12624:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12614:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12614:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12588:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12588:47:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12588:47:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12644:84:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12714:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "12723:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "12652:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12652:76:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12644:4:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12514:9:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12526:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12537:4:22",
                "type": ""
              }
            ],
            "src": "12426:309:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12903:344:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "12913:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12925:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12936:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12921:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12921:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12913:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12960:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12971:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12956:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12956:17:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "12979:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12985:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12975:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12975:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12949:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12949:47:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12949:47:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13005:84:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "13075:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "13084:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "13013:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13013:76:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13005:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13110:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13121:2:22",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13106:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13106:18:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "13130:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13136:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "13126:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13126:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13099:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13099:48:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13099:48:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13156:84:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "13226:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "13235:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "13164:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13164:76:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13156:4:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12867:9:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "12879:6:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12887:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12898:4:22",
                "type": ""
              }
            ],
            "src": "12741:506:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13461:495:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "13471:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13483:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13494:2:22",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13479:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13479:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13471:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13518:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13529:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13514:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13514:17:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "13537:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13543:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "13533:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13533:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13507:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13507:47:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13507:47:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13563:84:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "13633:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "13642:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "13571:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13571:76:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13563:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13668:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13679:2:22",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13664:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13664:18:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "13688:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13694:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "13684:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13684:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13657:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13657:48:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13657:48:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13714:84:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "13784:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "13793:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "13722:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13722:76:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13714:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13819:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13830:2:22",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13815:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13815:18:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "13839:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13845:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "13835:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13835:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13808:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13808:48:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13808:48:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13865:84:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "13935:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "13944:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "13873:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13873:76:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13865:4:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13417:9:22",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "13429:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "13437:6:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "13445:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13456:4:22",
                "type": ""
              }
            ],
            "src": "13253:703:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14151:425:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "14161:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14173:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14184:2:22",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14169:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14169:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14161:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14208:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14219:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14204:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14204:17:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "14227:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14233:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "14223:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14223:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14197:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14197:47:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14197:47:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14253:84:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14323:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "14332:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "14261:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14261:76:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14253:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14358:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14369:2:22",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14354:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14354:18:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "14378:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14384:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "14374:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14374:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14347:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14347:48:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14347:48:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14404:84:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "14474:6:22"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "14483:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "14412:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14412:76:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14404:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "14541:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14554:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14565:2:22",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14550:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14550:18:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint16_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "14498:42:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14498:71:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14498:71:22"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_uint16__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14107:9:22",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "14119:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14127:6:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14135:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14146:4:22",
                "type": ""
              }
            ],
            "src": "13962:614:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14698:142:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "14708:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14720:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14731:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14716:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14716:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14708:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14806:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14819:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14830:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14815:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14815:17:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_contract$_Algorithm_$3863_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "14744:61:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14744:89:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14744:89:22"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_Algorithm_$3863__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14670:9:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14682:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14693:4:22",
                "type": ""
              }
            ],
            "src": "14582:258:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14959:139:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "14969:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14981:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14992:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14977:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14977:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14969:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "15064:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15077:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15088:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15073:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15073:17:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_contract$_Digest_$5741_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "15005:58:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15005:86:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15005:86:22"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_Digest_$5741__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14931:9:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14943:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14954:4:22",
                "type": ""
              }
            ],
            "src": "14846:252:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15222:144:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15232:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15244:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15255:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15240:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15240:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15232:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "15332:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15345:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15356:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15341:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15341:17:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_contract$_NSEC3Digest_$5847_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "15268:63:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15268:91:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15268:91:22"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_NSEC3Digest_$5847__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15194:9:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "15206:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15217:4:22",
                "type": ""
              }
            ],
            "src": "15104:262:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15543:248:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15553:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15565:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15576:2:22",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15561:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15561:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15553:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15600:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15611:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15596:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15596:17:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "15619:4:22"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15625:9:22"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "15615:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15615:20:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15589:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15589:47:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15589:47:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15645:139:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "15779:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "15653:124:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15653:131:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15645:4:22"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15523:9:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15538:4:22",
                "type": ""
              }
            ],
            "src": "15372:419:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15947:284:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15957:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15969:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15980:2:22",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15965:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15965:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15957:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "16035:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16048:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16059:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16044:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16044:17:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint32_to_t_uint32_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "15993:41:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15993:69:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15993:69:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "16114:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16127:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16138:2:22",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16123:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16123:18:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint64_to_t_uint64_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "16072:41:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16072:70:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16072:70:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "16196:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16209:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16220:2:22",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16205:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16205:18:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes20_to_t_bytes20_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "16152:43:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16152:72:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16152:72:22"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint32_t_uint64_t_bytes20__to_t_uint32_t_uint64_t_bytes20__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15903:9:22",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "15915:6:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "15923:6:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "15931:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15942:4:22",
                "type": ""
              }
            ],
            "src": "15797:434:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16359:202:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16369:26:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16381:9:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16392:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16377:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16377:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16369:4:22"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "16445:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16458:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16469:1:22",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16454:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16454:17:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint8_to_t_uint8_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "16405:39:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16405:67:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16405:67:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "16526:6:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16539:9:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16550:2:22",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16535:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16535:18:22"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "16482:43:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16482:72:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16482:72:22"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8_t_address__to_t_uint8_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16323:9:22",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16335:6:22",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16343:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16354:4:22",
                "type": ""
              }
            ],
            "src": "16237:324:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16607:238:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16617:19:22",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16633:2:22",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "16627:5:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16627:9:22"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "16617:6:22"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16645:35:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "16667:6:22"
                      },
                      {
                        "name": "size",
                        "nodeType": "YulIdentifier",
                        "src": "16675:4:22"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16663:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16663:17:22"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "16649:10:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "16791:17:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error",
                            "nodeType": "YulIdentifier",
                            "src": "16793:11:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16793:13:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16793:13:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "16734:10:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16746:18:22",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "16731:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16731:34:22"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "16770:10:22"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "16782:6:22"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "16767:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16767:22:22"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "16728:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16728:62:22"
                  },
                  "nodeType": "YulIf",
                  "src": "16725:2:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16824:2:22",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "16828:10:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16817:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16817:22:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16817:22:22"
                }
              ]
            },
            "name": "allocateMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "16591:4:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "16600:6:22",
                "type": ""
              }
            ],
            "src": "16567:278:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16917:260:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17022:17:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error",
                            "nodeType": "YulIdentifier",
                            "src": "17024:11:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17024:13:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17024:13:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "16994:6:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17002:18:22",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "16991:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16991:30:22"
                  },
                  "nodeType": "YulIf",
                  "src": "16988:2:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17069:41:22",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "17085:6:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17093:4:22",
                            "type": "",
                            "value": "0x1f"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17081:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17081:17:22"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17104:4:22",
                            "type": "",
                            "value": "0x1f"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "17100:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17100:9:22"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "17077:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17077:33:22"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "17069:4:22"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17147:23:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "size",
                        "nodeType": "YulIdentifier",
                        "src": "17159:4:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17165:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17155:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17155:15:22"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "17147:4:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "16901:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "16912:4:22",
                "type": ""
              }
            ],
            "src": "16851:326:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17241:40:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17252:22:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "17268:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "17262:5:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17262:12:22"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "17252:6:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_length_t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "17224:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "17234:6:22",
                "type": ""
              }
            ],
            "src": "17183:98:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17382:73:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "17399:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "17404:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17392:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17392:19:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17392:19:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17420:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "17439:3:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17444:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17435:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17435:14:22"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "17420:11:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "17354:3:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "17359:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "17370:11:22",
                "type": ""
              }
            ],
            "src": "17287:168:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17574:34:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17584:18:22",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "17599:3:22"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "17584:11:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "17546:3:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "17551:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "17562:11:22",
                "type": ""
              }
            ],
            "src": "17461:147:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17710:73:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "17727:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "17732:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17720:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17720:19:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17720:19:22"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17748:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "17767:3:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17772:4:22",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17763:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17763:14:22"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "17748:11:22"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "17682:3:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "17687:6:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "17698:11:22",
                "type": ""
              }
            ],
            "src": "17614:169:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17834:51:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17844:35:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "17873:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "17855:17:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17855:24:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "17844:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "17816:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "17826:7:22",
                "type": ""
              }
            ],
            "src": "17789:96:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17933:48:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17943:32:22",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "17968:5:22"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "17961:6:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17961:13:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "17954:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17954:21:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "17943:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "17915:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "17925:7:22",
                "type": ""
              }
            ],
            "src": "17891:90:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18032:105:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18042:89:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18057:5:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18064:66:22",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "18053:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18053:78:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18042:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_bytes20",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18014:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18024:7:22",
                "type": ""
              }
            ],
            "src": "17987:150:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18188:32:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18198:16:22",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "18209:5:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18198:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18170:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18180:7:22",
                "type": ""
              }
            ],
            "src": "18143:77:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18289:51:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18299:35:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18328:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "18310:17:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18310:24:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18299:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_contract$_Algorithm_$3863",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18271:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18281:7:22",
                "type": ""
              }
            ],
            "src": "18226:114:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18406:51:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18416:35:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18445:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "18427:17:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18427:24:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18416:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_contract$_Digest_$5741",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18388:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18398:7:22",
                "type": ""
              }
            ],
            "src": "18346:111:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18528:51:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18538:35:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18567:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "18549:17:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18549:24:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18538:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_contract$_NSEC3Digest_$5847",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18510:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18520:7:22",
                "type": ""
              }
            ],
            "src": "18463:116:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18629:45:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18639:29:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18654:5:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18661:6:22",
                        "type": "",
                        "value": "0xffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "18650:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18650:18:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18639:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint16",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18611:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18621:7:22",
                "type": ""
              }
            ],
            "src": "18585:89:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18725:81:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18735:65:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18750:5:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18757:42:22",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "18746:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18746:54:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18735:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18707:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18717:7:22",
                "type": ""
              }
            ],
            "src": "18680:126:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18856:49:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18866:33:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18881:5:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18888:10:22",
                        "type": "",
                        "value": "0xffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "18877:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18877:22:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18866:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18838:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18848:7:22",
                "type": ""
              }
            ],
            "src": "18812:93:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18955:57:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18965:41:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18980:5:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18987:18:22",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "18976:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18976:30:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18965:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint64",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18937:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18947:7:22",
                "type": ""
              }
            ],
            "src": "18911:101:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19061:43:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19071:27:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19086:5:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19093:4:22",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "19082:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19082:16:22"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "19071:7:22"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19043:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "19053:7:22",
                "type": ""
              }
            ],
            "src": "19018:86:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19188:84:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19198:68:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19260:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "convert_t_contract$_Algorithm_$3863_to_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "19211:48:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19211:55:22"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "19198:9:22"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_contract$_Algorithm_$3863_to_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19168:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "19178:9:22",
                "type": ""
              }
            ],
            "src": "19110:162:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19356:53:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19366:37:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19397:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "19379:17:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19379:24:22"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "19366:9:22"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_contract$_Algorithm_$3863_to_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19336:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "19346:9:22",
                "type": ""
              }
            ],
            "src": "19278:131:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19490:81:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19500:65:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19559:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "convert_t_contract$_Digest_$5741_to_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "19513:45:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19513:52:22"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "19500:9:22"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_contract$_Digest_$5741_to_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19470:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "19480:9:22",
                "type": ""
              }
            ],
            "src": "19415:156:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19652:53:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19662:37:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19693:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "19675:17:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19675:24:22"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "19662:9:22"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_contract$_Digest_$5741_to_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19632:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "19642:9:22",
                "type": ""
              }
            ],
            "src": "19577:128:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19791:86:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19801:70:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19865:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "convert_t_contract$_NSEC3Digest_$5847_to_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "19814:50:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19814:57:22"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "19801:9:22"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_contract$_NSEC3Digest_$5847_to_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19771:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "19781:9:22",
                "type": ""
              }
            ],
            "src": "19711:166:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19963:53:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19973:37:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "20004:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "19986:17:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19986:24:22"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "19973:9:22"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_contract$_NSEC3Digest_$5847_to_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19943:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "19953:9:22",
                "type": ""
              }
            ],
            "src": "19883:133:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20081:52:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "20091:36:22",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "20121:5:22"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint16",
                      "nodeType": "YulIdentifier",
                      "src": "20104:16:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20104:23:22"
                  },
                  "variableNames": [
                    {
                      "name": "converted",
                      "nodeType": "YulIdentifier",
                      "src": "20091:9:22"
                    }
                  ]
                }
              ]
            },
            "name": "convert_t_uint16_to_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "20061:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "converted",
                "nodeType": "YulTypedName",
                "src": "20071:9:22",
                "type": ""
              }
            ],
            "src": "20022:111:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20190:103:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "20213:3:22"
                      },
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "20218:3:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "20223:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "20200:12:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20200:30:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20200:30:22"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "20271:3:22"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "20276:6:22"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20267:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20267:16:22"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20285:1:22",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20260:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20260:27:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20260:27:22"
                }
              ]
            },
            "name": "copy_calldata_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "20172:3:22",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "20177:3:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "20182:6:22",
                "type": ""
              }
            ],
            "src": "20139:154:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20348:258:22",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "20358:10:22",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "20367:1:22",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "20362:1:22",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20427:63:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "20452:3:22"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "20457:1:22"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "20448:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20448:11:22"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "20471:3:22"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "20476:1:22"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "20467:3:22"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "20467:11:22"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "20461:5:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20461:18:22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "20441:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20441:39:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20441:39:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "20388:1:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "20391:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "20385:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20385:13:22"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "20399:19:22",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "20401:15:22",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "20410:1:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20413:2:22",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "20406:3:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20406:10:22"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "20401:1:22"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "20381:3:22",
                    "statements": []
                  },
                  "src": "20377:113:22"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20524:76:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "20574:3:22"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "20579:6:22"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "20570:3:22"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20570:16:22"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20588:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "20563:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20563:27:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20563:27:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "20505:1:22"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "20508:6:22"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "20502:2:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20502:13:22"
                  },
                  "nodeType": "YulIf",
                  "src": "20499:2:22"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "20330:3:22",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "20335:3:22",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "20340:6:22",
                "type": ""
              }
            ],
            "src": "20299:307:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20635:25:22",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "functionName": {
                      "name": "invalid",
                      "nodeType": "YulIdentifier",
                      "src": "20645:7:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20645:9:22"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20645:9:22"
                }
              ]
            },
            "name": "panic_error",
            "nodeType": "YulFunctionDefinition",
            "src": "20612:48:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20714:54:22",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "20724:38:22",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "20742:5:22"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20749:2:22",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20738:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20738:14:22"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20758:2:22",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "20754:3:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20754:7:22"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "20734:3:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20734:28:22"
                  },
                  "variableNames": [
                    {
                      "name": "result",
                      "nodeType": "YulIdentifier",
                      "src": "20724:6:22"
                    }
                  ]
                }
              ]
            },
            "name": "round_up_to_mul_of_32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "20697:5:22",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "result",
                "nodeType": "YulTypedName",
                "src": "20707:6:22",
                "type": ""
              }
            ],
            "src": "20666:102:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20817:79:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20874:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20883:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20886:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20876:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20876:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20876:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "20840:5:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "20865:5:22"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_address",
                              "nodeType": "YulIdentifier",
                              "src": "20847:17:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20847:24:22"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "20837:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20837:35:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "20830:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20830:43:22"
                  },
                  "nodeType": "YulIf",
                  "src": "20827:2:22"
                }
              ]
            },
            "name": "validator_revert_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "20810:5:22",
                "type": ""
              }
            ],
            "src": "20774:122:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20942:76:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20996:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21005:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21008:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20998:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20998:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20998:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "20965:5:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "20987:5:22"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_bool",
                              "nodeType": "YulIdentifier",
                              "src": "20972:14:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20972:21:22"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "20962:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20962:32:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "20955:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20955:40:22"
                  },
                  "nodeType": "YulIf",
                  "src": "20952:2:22"
                }
              ]
            },
            "name": "validator_revert_t_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "20935:5:22",
                "type": ""
              }
            ],
            "src": "20902:116:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21067:79:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "21124:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21133:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21136:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "21126:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "21126:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "21126:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "21090:5:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "21115:5:22"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_bytes32",
                              "nodeType": "YulIdentifier",
                              "src": "21097:17:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "21097:24:22"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "21087:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21087:35:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "21080:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21080:43:22"
                  },
                  "nodeType": "YulIf",
                  "src": "21077:2:22"
                }
              ]
            },
            "name": "validator_revert_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "21060:5:22",
                "type": ""
              }
            ],
            "src": "21024:122:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21213:97:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "21288:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21297:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21300:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "21290:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "21290:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "21290:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "21236:5:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "21279:5:22"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_contract$_Algorithm_$3863",
                              "nodeType": "YulIdentifier",
                              "src": "21243:35:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "21243:42:22"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "21233:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21233:53:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "21226:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21226:61:22"
                  },
                  "nodeType": "YulIf",
                  "src": "21223:2:22"
                }
              ]
            },
            "name": "validator_revert_t_contract$_Algorithm_$3863",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "21206:5:22",
                "type": ""
              }
            ],
            "src": "21152:158:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21374:94:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "21446:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21455:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21458:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "21448:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "21448:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "21448:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "21397:5:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "21437:5:22"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_contract$_Digest_$5741",
                              "nodeType": "YulIdentifier",
                              "src": "21404:32:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "21404:39:22"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "21394:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21394:50:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "21387:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21387:58:22"
                  },
                  "nodeType": "YulIf",
                  "src": "21384:2:22"
                }
              ]
            },
            "name": "validator_revert_t_contract$_Digest_$5741",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "21367:5:22",
                "type": ""
              }
            ],
            "src": "21316:152:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21537:99:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "21614:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21623:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21626:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "21616:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "21616:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "21616:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "21560:5:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "21605:5:22"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_contract$_NSEC3Digest_$5847",
                              "nodeType": "YulIdentifier",
                              "src": "21567:37:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "21567:44:22"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "21557:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21557:55:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "21550:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21550:63:22"
                  },
                  "nodeType": "YulIf",
                  "src": "21547:2:22"
                }
              ]
            },
            "name": "validator_revert_t_contract$_NSEC3Digest_$5847",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "21530:5:22",
                "type": ""
              }
            ],
            "src": "21474:162:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21684:78:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "21740:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21749:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21752:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "21742:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "21742:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "21742:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "21707:5:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "21731:5:22"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint16",
                              "nodeType": "YulIdentifier",
                              "src": "21714:16:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "21714:23:22"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "21704:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21704:34:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "21697:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21697:42:22"
                  },
                  "nodeType": "YulIf",
                  "src": "21694:2:22"
                }
              ]
            },
            "name": "validator_revert_t_uint16",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "21677:5:22",
                "type": ""
              }
            ],
            "src": "21642:120:22"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21809:77:22",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "21864:16:22",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21873:1:22",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "21876:1:22",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "21866:6:22"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "21866:12:22"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "21866:12:22"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "21832:5:22"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "21855:5:22"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint8",
                              "nodeType": "YulIdentifier",
                              "src": "21839:15:22"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "21839:22:22"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "21829:2:22"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21829:33:22"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "21822:6:22"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21822:41:22"
                  },
                  "nodeType": "YulIf",
                  "src": "21819:2:22"
                }
              ]
            },
            "name": "validator_revert_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "21802:5:22",
                "type": ""
              }
            ],
            "src": "21768:118:22"
          }
        ]
      },
      "contents": "{\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_t_bytes32_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bytes32(value)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x01)), end) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := calldataload(offset)\n        array := allocateMemory(array_allocation_size_t_bytes_memory_ptr(length))\n        mstore(array, length)\n        let src := add(offset, 0x20)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert(0, 0) }\n        copy_calldata_to_memory(src, dst, length)\n    }\n\n    function abi_decode_t_contract$_Algorithm_$3863(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_Algorithm_$3863(value)\n    }\n\n    function abi_decode_t_contract$_Digest_$5741(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_Digest_$5741(value)\n    }\n\n    function abi_decode_t_contract$_NSEC3Digest_$5847(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_NSEC3Digest_$5847(value)\n    }\n\n    // struct DNSSEC.RRSetWithSignature\n    function abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr(headStart, end) -> value {\n        if slt(sub(end, headStart), 0x40) { revert(0, 0) }\n        value := allocateMemory(0x40)\n\n        {\n            // rrset\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            mstore(add(value, 0x00), abi_decode_t_bytes_memory_ptr(add(headStart, offset), end))\n\n        }\n\n        {\n            // sig\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            mstore(add(value, 0x20), abi_decode_t_bytes_memory_ptr(add(headStart, offset), end))\n\n        }\n\n    }\n\n    function abi_decode_t_uint16(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint16(value)\n    }\n\n    function abi_decode_t_uint8(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint8(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_bytes32_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value0 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value1 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_struct$_RRSetWithSignature_$740_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value0 := abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value1 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint16t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value1, value2 := abi_decode_t_bytes_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint16t_bytes_memory_ptrt_struct$_RRSetWithSignature_$740_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value1 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value2 := abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 96))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint16t_bytes_memory_ptrt_struct$_RRSetWithSignature_$740_memory_ptrt_struct$_RRSetWithSignature_$740_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value1 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value2 := abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 96))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value3 := abi_decode_t_struct$_RRSetWithSignature_$740_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := calldataload(add(headStart, 128))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n            value4 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint8t_contract$_Algorithm_$3863(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := 32\n            value1 := abi_decode_t_contract$_Algorithm_$3863(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint8t_contract$_Digest_$5741(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := 32\n            value1 := abi_decode_t_contract$_Digest_$5741(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint8t_contract$_NSEC3Digest_$5847(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n            let offset := 0\n            value0 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n        }\n\n        {\n            let offset := 32\n            value1 := abi_decode_t_contract$_NSEC3Digest_$5847(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_t_bytes20_to_t_bytes20_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bytes20(value))\n    }\n\n    // bytes -> bytes\n    function abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(start, length, pos) -> end {\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n\n        copy_calldata_to_memory(start, pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_t_contract$_Algorithm_$3863_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_Algorithm_$3863_to_t_address(value))\n    }\n\n    function abi_encode_t_contract$_Digest_$5741_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_Digest_$5741_to_t_address(value))\n    }\n\n    function abi_encode_t_contract$_NSEC3Digest_$5847_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_NSEC3Digest_$5847_to_t_address(value))\n    }\n\n    function abi_encode_t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 20)\n\n        mstore(add(pos, 0), \"No valid proof found\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_uint16_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, convert_t_uint16_to_t_uint256(value))\n    }\n\n    function abi_encode_t_uint32_to_t_uint32_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint32(value))\n    }\n\n    function abi_encode_t_uint64_to_t_uint64_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint64(value))\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value1, value0) -> end {\n\n        pos := abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, value1,  pos)\n\n        end := pos\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value0,  tail)\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value0,  tail)\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value1,  tail)\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value2,  tail)\n\n    }\n\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_uint16__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value0,  tail)\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value1,  tail)\n\n        abi_encode_t_uint16_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_encode_tuple_t_contract$_Algorithm_$3863__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_Algorithm_$3863_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_contract$_Digest_$5741__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_Digest_$5741_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_contract$_NSEC3Digest_$5847__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_NSEC3Digest_$5847_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint32_t_uint64_t_bytes20__to_t_uint32_t_uint64_t_bytes20__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint32_to_t_uint32_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint64_to_t_uint64_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_bytes20_to_t_bytes20_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_encode_tuple_t_uint8_t_address__to_t_uint8_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function allocateMemory(size) -> memPtr {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error() }\n        mstore(64, newFreePtr)\n    }\n\n    function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error() }\n\n        // round up\n        size := and(add(length, 0x1f), not(0x1f))\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function cleanup_t_bytes20(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000)\n    }\n\n    function cleanup_t_bytes32(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_contract$_Algorithm_$3863(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function cleanup_t_contract$_Digest_$5741(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function cleanup_t_contract$_NSEC3Digest_$5847(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function cleanup_t_uint16(value) -> cleaned {\n        cleaned := and(value, 0xffff)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_uint32(value) -> cleaned {\n        cleaned := and(value, 0xffffffff)\n    }\n\n    function cleanup_t_uint64(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffff)\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function convert_t_contract$_Algorithm_$3863_to_t_address(value) -> converted {\n        converted := convert_t_contract$_Algorithm_$3863_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_Algorithm_$3863_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(value)\n    }\n\n    function convert_t_contract$_Digest_$5741_to_t_address(value) -> converted {\n        converted := convert_t_contract$_Digest_$5741_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_Digest_$5741_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(value)\n    }\n\n    function convert_t_contract$_NSEC3Digest_$5847_to_t_address(value) -> converted {\n        converted := convert_t_contract$_NSEC3Digest_$5847_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_NSEC3Digest_$5847_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(value)\n    }\n\n    function convert_t_uint16_to_t_uint256(value) -> converted {\n        converted := cleanup_t_uint16(value)\n    }\n\n    function copy_calldata_to_memory(src, dst, length) {\n        calldatacopy(dst, src, length)\n        // clear end\n        mstore(add(dst, length), 0)\n    }\n\n    function copy_memory_to_memory(src, dst, length) {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length)\n        {\n            // clear end\n            mstore(add(dst, length), 0)\n        }\n    }\n\n    function panic_error() {\n        invalid()\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_bytes32(value) {\n        if iszero(eq(value, cleanup_t_bytes32(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_contract$_Algorithm_$3863(value) {\n        if iszero(eq(value, cleanup_t_contract$_Algorithm_$3863(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_contract$_Digest_$5741(value) {\n        if iszero(eq(value, cleanup_t_contract$_Digest_$5741(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_contract$_NSEC3Digest_$5847(value) {\n        if iszero(eq(value, cleanup_t_contract$_NSEC3Digest_$5847(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_uint16(value) {\n        if iszero(eq(value, cleanup_t_uint16(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_uint8(value) {\n        if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n    }\n\n}\n",
      "id": 22,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "442:26880:2:-:0;;;1575:437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;252:10:4;244:5;;:18;;;;;;;;;;;;;;;;;;1756:8:2;1746:7;:18;;;;;;;;;;;;:::i;:::-;;1815:145;;;;;;;;1853:1;1815:145;;;;;;1886:15;1815:145;;;;;;1940:7;1930:18;;;;;;:::i;:::-;;;;;;;;1815:145;;;;;;1774:6;:26;1781:18;1774:26;;;;;;;;;;;:38;759:2;1774:38;;;;;;;;;;;;;;;:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1975:30;1997:7;1975:30;;;;;;:::i;:::-;;;;;;;;1575:437;442:26880;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:466:22:-;;122:3;115:4;107:6;103:17;99:27;89:2;;140:1;137;130:12;89:2;173:6;167:13;198:64;213:48;254:6;213:48;:::i;:::-;198:64;:::i;:::-;189:73;;285:6;278:5;271:21;324:4;316:6;312:17;360:4;353:5;349:16;398:3;389:6;384:3;380:16;377:25;374:2;;;415:1;412;405:12;374:2;428:39;460:6;455:3;450;428:39;:::i;:::-;79:394;;;;;;;:::o;479:386::-;;607:2;595:9;586:7;582:23;578:32;575:2;;;623:1;620;613:12;575:2;686:1;675:9;671:17;665:24;716:18;708:6;705:30;702:2;;;748:1;745;738:12;702:2;775:73;840:7;831:6;820:9;816:22;775:73;:::i;:::-;765:83;;637:221;565:300;;;;:::o;893:932::-;;1013:5;1007:12;1050:1;1039:9;1035:17;1066:1;1061:280;;;;1355:1;1350:469;;;;1028:791;;1061:280;1151:4;1147:1;1136:9;1132:17;1128:28;1176:70;1239:6;1234:3;1176:70;:::i;:::-;1169:77;;1290:4;1286:9;1275;1271:25;1266:3;1259:38;1326:4;1321:3;1317:14;1310:21;;1068:273;1061:280;;1350:469;1431:1;1420:9;1416:17;1453:70;1516:6;1511:3;1453:70;:::i;:::-;1446:77;;1551:37;1582:5;1551:37;:::i;:::-;1610:1;1624:154;1638:6;1635:1;1632:13;1624:154;;;1712:7;1706:14;1702:1;1697:3;1693:11;1686:35;1762:1;1753:7;1749:15;1738:26;;1660:4;1657:1;1653:12;1648:17;;1624:154;;;1807:1;1802:3;1798:11;1791:18;;1357:462;;;1028:791;;980:845;;;;;:::o;1853:993::-;;1991:5;1985:12;2028:1;2017:9;2013:17;2044:1;2039:300;;;;2353:1;2348:492;;;;2006:834;;2039:300;2129:4;2125:1;2114:9;2110:17;2106:28;2154:88;2235:6;2230:3;2154:88;:::i;:::-;2147:95;;2286:4;2282:9;2271;2267:25;2262:3;2255:38;2322:6;2317:3;2313:16;2306:23;;2046:293;2039:300;;2348:492;2429:1;2418:9;2414:17;2451:88;2532:6;2527:3;2451:88;:::i;:::-;2444:95;;2567:37;2598:5;2567:37;:::i;:::-;2626:1;2640:154;2654:6;2651:1;2648:13;2640:154;;;2728:7;2722:14;2718:1;2713:3;2709:11;2702:35;2778:1;2769:7;2765:15;2754:26;;2676:4;2673:1;2669:12;2664:17;;2640:154;;;2823:6;2818:3;2814:16;2807:23;;2355:485;;;2006:834;;1958:888;;;;;:::o;2852:359::-;;3014:65;3077:1;3072:3;3014:65;:::i;:::-;3007:72;;3109:66;3105:1;3100:3;3096:11;3089:87;3202:2;3197:3;3193:12;3186:19;;2997:214;;;:::o;3217:265::-;;3366:90;3452:3;3443:6;3366:90;:::i;:::-;3359:97;;3473:3;3466:10;;3348:134;;;;:::o;3488:608::-;;3734:2;3723:9;3719:18;3711:26;;3783:9;3777:4;3773:20;3769:1;3758:9;3754:17;3747:47;3811:130;3936:4;3811:130;:::i;:::-;3803:138;;3988:9;3982:4;3978:20;3973:2;3962:9;3958:18;3951:48;4016:73;4084:4;4075:6;4016:73;:::i;:::-;4008:81;;3701:395;;;;:::o;4102:278::-;;4168:2;4162:9;4152:19;;4210:4;4202:6;4198:17;4317:6;4305:10;4302:22;4281:18;4269:10;4266:34;4263:62;4260:2;;;4328:13;;:::i;:::-;4260:2;4363:10;4359:2;4352:22;4142:238;;;;:::o;4386:326::-;;4537:18;4529:6;4526:30;4523:2;;;4559:13;;:::i;:::-;4523:2;4639:4;4635:9;4628:4;4620:6;4616:17;4612:33;4604:41;;4700:4;4694;4690:15;4682:23;;4452:260;;;:::o;4718:140::-;;4789:3;4781:11;;4812:3;4809:1;4802:14;4846:4;4843:1;4833:18;4825:26;;4771:87;;;:::o;4864:168::-;;4981:6;4976:3;4969:19;5021:4;5016:3;5012:14;4997:29;;4959:73;;;;:::o;5038:147::-;;5176:3;5161:18;;5151:34;;;;:::o;5191:307::-;5259:1;5269:113;5283:6;5280:1;5277:13;5269:113;;;5368:1;5363:3;5359:11;5353:18;5349:1;5344:3;5340:11;5333:39;5305:2;5302:1;5298:10;5293:15;;5269:113;;;5400:6;5397:1;5394:13;5391:2;;;5480:1;5471:6;5466:3;5462:16;5455:27;5391:2;5240:258;;;;:::o;5504:48::-;5537:9;442:26880:2;;;;;;;",
  "deployedSourceMap": "442:26880:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2244:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16033:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;9714:1658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;275:87:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2623:148:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5442:1528;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1309:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3495:579;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2990:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;98:20:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91::1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1355:50:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1257:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4794:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2244:154;183:5:4;;;;;;;;;;;169:19;;:10;:19;;;161:28;;;;;;2337:4:2::1;2320:10;:14;2331:2;2320:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;2356:35;2373:2;2385:4;2356:35;;;;;;;:::i;:::-;;;;;;;;2244:154:::0;;:::o;16033:247::-;16118:6;16126;16134:7;16153:20;16176:6;:23;16193:4;;16183:15;;;;;;;:::i;:::-;;;;;;;;16176:23;;;;;;;;;;;:32;16200:7;16176:32;;;;;;;;;;;;;;;16153:55;;16226:6;:16;;;;;;;;;;;;16244:6;:15;;;;;;;;;;;;16261:6;:11;;;;;;;;;;;;16218:55;;;;;;;16033:247;;;;;;;:::o;9714:1658::-;9925:23;9957:6;:29;9974:10;9964:21;;;;;;9957:29;;;;;;;;;;;:41;9987:10;9957:41;;;;;;;;;;;;;;;:51;;;;;;;;;;;;9925:84;;10020:27;;:::i;:::-;10050:42;10068:15;10085:6;10050:17;:42::i;:::-;10020:72;;10102:53;10121:2;10125:10;10137:17;10102:18;:53::i;:::-;10166:27;;:::i;:::-;10233:1;10206:11;:17;;;:24;:28;10203:168;;;10255:38;10273:11;10286:6;10255:17;:38::i;:::-;10250:43;;10307:53;10326:2;10330:10;10342:17;10307:18;:53::i;:::-;10203:168;10381:28;;:::i;:::-;10412:13;10422:2;10412:9;:13::i;:::-;10381:44;;10532:1;10524:4;10508:7;:13;;;:20;:25;;;10500:34;;;;;;10755:38;722:2;10755:7;:23;;:38;;;;:::i;:::-;10754:39;:121;;;;;10799:35;646:1;10799:7;:23;;:35;;;;:::i;:::-;10798:36;:76;;;;10838:36;683:1;10838:7;:23;;:36;;;;:::i;:::-;10798:76;10754:121;10746:130;;;;;;10972:63;10994:10;11006;11018:2;:7;;;11027;10972:21;:63::i;:::-;10969:397;;;11058:6;:29;11075:10;11065:21;;;;;;11058:29;;;;;;;;;;;:41;11088:10;11058:41;;;;;;;;;;;;;;;;11051:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10969:397;;;11165:87;11187:10;11199;11211:2;:7;;;11220;11229:2;:7;;;11238:13;11248:2;11238:9;:13::i;:::-;11165:21;:87::i;:::-;11162:204;;;11275:6;:29;11292:10;11282:21;;;;;;11275:29;;;;;;;;;;;:41;11305:10;11275:41;;;;;;;;;;;;;;;;11268:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11162:204;;;11347:8;;;11162:204;10969:397;9714:1658;;;;;;;;;:::o;275:87:4:-;183:5;;;;;;;;;;;169:19;;:10;:19;;;161:28;;;;;;347:8:::1;339:5;;:16;;;;;;;;;;;;;;;;;;275:87:::0;:::o;2623:148:2:-;183:5:4;;;;;;;;;;;169:19;;:10;:19;;;161:28;;;;;;2709:6:2::1;2695:7;:11;2703:2;2695:11;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;2730:34;2744:2;2756:6;2730:34;;;;;;;:::i;:::-;;;;;;;;2623:148:::0;;:::o;5442:1528::-;5597:30;;:::i;:::-;5645;5663:4;5669:5;5645:17;:30::i;:::-;5637:38;;838:2;5693:33;;:5;:17;;;:33;;;5685:42;;;;;;5893:1;5837:6;:29;5854:10;5844:21;;;;;;5837:29;;;;;;;;;;;:41;5867:10;5837:41;;;;;;;;;;;;;;;:51;;;;;;;;;;;;5819:5;:15;;;:69;5813:81;;;;5805:90;;;;;;5911:30;;:::i;:::-;5944:11;:5;:9;:11::i;:::-;5911:44;;5958:11;:4;:9;:11::i;:::-;5906:996;;6754:55;6768:4;6774:5;:10;;;6786;6798;6754:13;:55::i;:::-;6830:6;:29;6847:10;6837:21;;;;;;6830:29;;;;;;;;;;;:41;6860:10;6830:41;;;;;;;;;;;;;;;;6823:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6885:7;;;;5906:996;;6955:8;;;5442:1528;;;;;:::o;1309:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3495:579::-;3582:12;3606:11;3631:18;3652:6;3631:27;;3668:378;3683:4;:11;3674:6;:20;3668:378;;;3710:31;;:::i;:::-;3769:51;3793:1;3784:6;:10;3796:23;3812:6;3796:4;:15;;:23;;;;:::i;:::-;3769:51;;:4;:14;;:51;;;;;:::i;:::-;3755:5;:11;;:65;;;;3865:1;3844:5;:11;;;:18;:22;3834:32;;;;3892:51;3916:1;3907:6;:10;3919:23;3935:6;3919:4;:15;;:23;;;;:::i;:::-;3892:51;;:4;:14;;:51;;;;;:::i;:::-;3880:5;:9;;:63;;;;3986:1;3967:5;:9;;;:16;:20;3957:30;;;;4009:26;4022:5;4029;4009:12;:26::i;:::-;4001:34;;3668:378;;;;4062:5;4055:12;;;;3495:579;;;;:::o;2990:168::-;183:5:4;;;;;;;;;;;169:19;;:10;:19;;;161:28;;;;;;3091:6:2::1;3072:12;:16;3085:2;3072:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;3112:39;3131:2;3143:6;3112:39;;;;;;;:::i;:::-;;;;;;;;2990:168:::0;;:::o;98:20:4:-;;;;;;;;;;;;;:::o;91::1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1355:50:2:-;;;;;;;;;;;;;;;;;;;;;;:::o;1257:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;4794:183::-;4909:12;4944:26;4957:5;4964;4944:12;:26::i;:::-;4937:33;;4794:183;;;;:::o;17793:1167::-;17895:30;;:::i;:::-;17945:27;:5;:11;;;:25;:27::i;:::-;17937:35;;17990;18001:5;:16;;;18019:5;17990:10;:35::i;:::-;17982:44;;;;;;18101:17;18121:37;18133:5;18140;:17;;;18121:11;:37::i;:::-;18101:57;;18198:5;:12;;;18176:34;;:18;18192:1;18176:4;:15;;:18;;;;:::i;:::-;:34;18168:43;;;;;;18234:4;18221:5;:10;;:17;;;;18621:1;18601:15;18582:5;:16;;;:34;;;18576:46;;;;18568:55;;;;;;18841:1;18821:5;:15;;;18803:33;;:15;:33;18797:45;;;;18789:54;;;;;;18888:42;18904:4;18910:5;18917;18924;18888:15;:42::i;:::-;18941:12;17793:1167;;;;:::o;11378:726::-;11648:1;11627:17;11609:4;:14;;;11603:41;:46;;;;11595:55;;;;;;919:2;11708:33;;:4;:16;;;:33;;;11700:42;;;;;;12054;12074:4;:9;;;12085:10;12054:19;:42::i;:::-;12046:51;;;;;;11378:726;;;:::o;13993:239::-;14062:20;;:::i;:::-;14094:30;;:::i;:::-;14127:8;:2;:6;:8::i;:::-;14094:41;;14152:73;14172:4;:16;;;14208:4;:16;;;14190:4;:15;;;:34;14152:4;:9;;;:19;;:73;;;;;:::i;:::-;14145:80;;;13993:239;;;:::o;8334:154:5:-;8415:4;8438:43;8454:4;:15;;;8471:1;8474:6;8438:15;:43::i;:::-;8431:50;;8334:154;;;;:::o;12110:457:2:-;12278:4;12396:64;12411:15;12428:19;12449:10;12396:14;:64::i;:::-;12393:145;;;12484:43;12516:10;12484:15;:31;;:43;;;;:::i;:::-;12483:44;12476:51;;;;12393:145;12555:5;12548:12;;12110:457;;;;;;;:::o;12573:1414::-;12761:4;12869:1;12861:4;12850:2;:8;;;:15;:20;;;12842:29;;;;;;12882:18;12903:27;12923:6;12903:19;:27::i;:::-;12882:48;;12940:18;12961:27;12981:6;12961:19;:27::i;:::-;12940:48;;12999:15;13126:11;13166:1;13140:23;13161:1;13140:10;:20;;:23;;;;:::i;:::-;:27;13126:41;;;;13122:764;13178:10;:17;13169:6;:26;13122:764;;;13332:10;13258:70;13267:2;13271:56;13292:6;13320;13300:10;:17;:26;13271:10;:20;;:56;;;;;:::i;:::-;13258:8;:70::i;:::-;:84;13255:588;;;13451:17;13471:78;13480:2;13484:64;13505:10;13537;13517;:17;:30;13484:10;:20;;:64;;;;;:::i;:::-;13471:8;:78::i;:::-;13451:98;;13583:2;:22;;;13570:10;:35;13567:262;;;13648:10;13636:9;:22;:60;;;;;13674:2;:22;;;13662:9;:34;13636:60;13629:67;;;;;;;;;13567:262;13762:10;13750:9;:22;:60;;;;13788:2;:22;;;13776:9;:34;13750:60;13743:67;;;;;;;;;13255:588;13869:6;13856:19;;13238:1;13207:28;13228:6;13207:10;:20;;:28;;;;:::i;:::-;:32;13197:42;;;;;;13122:764;;;;13975:5;13968:12;;;;;12573:1414;;;;;;;;;:::o;3244:127:5:-;3303:17;;:::i;:::-;3339:25;3350:5;:10;;;3362:1;3339:10;:25::i;:::-;3332:32;;3244:127;;;:::o;4184:121::-;4244:4;4282;:9;;;:16;4267:4;:11;;;:31;;4260:38;;4184:121;;;:::o;6976:1175:2:-;7121:16;7140:4;:16;;;7121:35;;7166:19;7188:33;7209:11;7188:4;:9;;;:20;;:33;;;;:::i;:::-;7166:55;;7231:16;7268:4;:16;;;7250:4;:15;;;:34;7231:53;;7399:14;7385:11;:28;7377:37;;;;;;7425:17;7445:33;7469:8;7445:10;:23;;:33;;;;:::i;:::-;7425:53;;7508:1;7491:13;:18;7488:657;;;7604:67;7644:14;7630:11;:28;7660:10;7604:4;:9;;;:25;;:67;;;;;:::i;:::-;7603:68;7595:77;;;;;;7488:657;;;7779:21;7803:47;7823:11;7835:14;7803:4;:9;;;:19;;:47;;;;;:::i;:::-;7779:71;;7939:1;7923:13;:17;7915:26;;;;;;7992:1;7958:31;7980:8;7958;:21;;:31;;;;:::i;:::-;:35;7955:180;;;8118:1;8082:33;8106:8;8082:10;:23;;:33;;;;:::i;:::-;:37;8074:46;;;;;;7955:180;7488:657;;6976:1175;;;;;;;;:::o;4428:682:5:-;4504:4;:15;;;4490:4;:11;;:29;;;;;4548:4;:9;;;:16;4533:4;:11;;;:31;4529:68;;4580:7;;4529:68;4632:8;4657:34;4668:4;:9;;;4679:4;:11;;;4657:10;:34::i;:::-;4643:4;:11;;;:48;4632:59;;4754:25;4775:3;4754:4;:9;;;:20;;:25;;;;:::i;:::-;4739:4;:12;;:40;;;;;;;;;;;4796:1;4789:8;;;;4820:25;4841:3;4820:4;:9;;;:20;;:25;;;;:::i;:::-;4807:4;:10;;:38;;;;;;;;;;;4862:1;4855:8;;;;4884:25;4905:3;4884:4;:9;;;:20;;:25;;;;:::i;:::-;4873:4;:8;;:36;;;;;;;;;;;4926:1;4919:8;;;;4964:16;4983:25;5004:3;4983:4;:9;;;:20;;:25;;;;:::i;:::-;4964:44;;;;5025:1;5018:8;;;;5055:3;5036:4;:16;;:22;;;;;5092:11;5086:3;:17;5068:4;:15;;:35;;;;;4428:682;;;;:::o;5696:223:0:-;5768:10;5809:4;:11;5804:1;5798:3;:7;:22;;5790:31;;;;;;5896:6;5889:3;5885:1;5879:4;5875:12;5871:22;5865:29;5861:42;5854:49;;5840:73;;;;:::o;8682:393::-;8765:12;8813:4;:11;8806:3;8797:6;:12;:27;;8789:36;;;;;;8836:16;8865:3;8855:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8836:33;;8879:9;8898:8;8957:2;8952:3;8948:12;8940:20;;8999:6;8994:2;8988:4;8984:13;8980:26;8973:33;;9025:22;9032:4;9038:3;9043;9025:6;:22::i;:::-;9065:3;9058:10;;;;;8682:393;;;;;:::o;16286:787:2:-;16379:12;16403:30;;:::i;:::-;16451:31;16469:5;16476;16451:17;:31::i;:::-;16443:39;;16493:23;16519:6;:29;16536:5;:10;;;16526:21;;;;;;16519:29;;;;;;;;;;;:48;16549:5;:17;;;16519:48;;;;;;;;;;;;;;;16493:74;;16602:1;16581:9;:18;;;;;;;;;;;;:22;;;16577:194;;;16758:1;16734:9;:19;;;;;;;;;;;;16716:5;:15;;;:37;16710:49;;;;16702:58;;;;;;16577:194;16832:154;;;;;;;;16863:5;:15;;;16832:154;;;;;;16909:15;16832:154;;;;;;16963:5;:10;;;16953:21;;;;;;16832:154;;;;;;16781:6;:29;16798:5;:10;;;16788:21;;;;;;16781:29;;;;;;;;;;;:48;16811:5;:17;;;16781:48;;;;;;;;;;;;;;;:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17002:36;17015:5;:10;;;17027:5;:10;;;17002:36;;;;;;;:::i;:::-;;;;;;;;17056:5;:10;;;17049:17;;;;16286:787;;;;:::o;2558:680:5:-;2622:21;;:::i;:::-;2674:27;2015:1;2674:4;:15;;:27;;;;:::i;:::-;2655:4;:16;;:46;;;;;;;;;;;2728:31;2054:1;2728:4;:14;;:31;;;;:::i;:::-;2711:4;:14;;:48;;;;;;;;;;;2783:28;2090:1;2783:4;:14;;:28;;;;:::i;:::-;2769:4;:11;;:42;;;;;;;;;;;2832:26;2123:1;2832:4;:15;;:26;;;;:::i;:::-;2821:4;:8;;:37;;;;;;;;;;;2886:33;2163:1;2886:4;:15;;:33;;;;:::i;:::-;2868:4;:15;;:51;;;;;;;;;;;2946:32;2202:2;2946:4;:15;;:32;;;;:::i;:::-;2929:4;:14;;:49;;;;;;;;;;;3002:30;2240:2;3002:4;:15;;:30;;;;:::i;:::-;2988:4;:11;;:44;;;;;;;;;;;3060:33;3069:4;2282:2;3060:8;:33::i;:::-;3042:4;:15;;:51;;;;3115:116;3150:4;:15;;;:22;2282:2;3130:42;3208:4;:15;;;:22;2282:2;3174:4;:11;:31;:56;3115:4;:14;;:116;;;;;:::i;:::-;3103:4;:9;;:128;;;;2558:680;;;:::o;18966:241:2:-;19047:4;19063:14;19080:37;19097:19;19114:1;19097:5;:16;;:19;;;;:::i;:::-;19080:5;:16;;:37;;;;:::i;:::-;19063:54;;19193:5;19183:16;;;;;;19134:66;;;:6;:23;19151:4;19141:15;;;;;;19134:23;;;;;;;;;;;:32;19158:7;19134:32;;;;;;;;;;;;;;;:37;;;;;;;;;;;;:66;;;;19127:73;;;18966:241;;;;:::o;19361:879::-;19457:17;19527:30;;:::i;:::-;19560:11;:5;:9;:11::i;:::-;19527:44;;19522:712;19574:11;:4;:9;:11::i;:::-;19522:712;;609:1;19673:25;;:4;:10;;;:25;;;19665:34;;;;;;19732:1;19717:4;:11;:16;19714:378;;;19760:11;:4;:9;:11::i;:::-;19753:18;;19714:378;;;19965:33;19986:4;:11;;;19965:4;:9;;;:20;;:33;;;;:::i;:::-;19950:4;:11;:48;19942:57;;;;;;20025:51;20037:1;20040:4;:9;;;20051:4;:11;;;20064:4;:11;20025:4;:11;;:51;;;;;;;:::i;:::-;20017:60;;;;;;19714:378;20211:11;20195:27;;:4;:12;;;:27;;;20187:36;;;;;;19587:11;:4;:9;:11::i;:::-;19522:712;;;;19361:879;;;;:::o;1592:390:5:-;1666:4;1682:10;1695:1;1682:14;;1706:248;1713:4;1706:248;;;1749:4;:11;1740:6;:20;1733:28;;;;1775:13;1791:22;1806:6;1791:4;:14;;:22;;;;:::i;:::-;1775:38;;;;1848:1;1837:8;:12;1827:22;;;;1879:1;1867:8;:13;1863:57;;;1900:5;;;1863:57;1942:1;1933:10;;;;1706:248;;;;1970:5;1963:12;;;1592:390;;;;:::o;20586:798:2:-;20890:4;:11;20863:5;:16;;;:23;:38;;20855:47;;;;;;20920:71;20944:1;20947:4;20967:5;:16;;;:23;20953:4;:11;:37;20920:5;:16;;;:23;;:71;;;;;;:::i;:::-;20912:80;;;;;;21003:33;;:::i;:::-;21039:19;21056:1;21039:5;:16;;:19;;;;:::i;:::-;21003:55;;759:2;21099:29;;:7;:15;;;:29;;;21095:283;;;21152:34;21165:5;21172:4;21178:7;21152:12;:34::i;:::-;21144:43;;;;;;21095:283;;;879:2;21208:33;;:7;:15;;;:33;;;21204:174;;;21265:40;21284:5;21291:4;21297:7;21265:18;:40::i;:::-;21257:49;;;;;;21204:174;;;21337:30;;;;;;;;;;:::i;:::-;;;;;;;;21204:174;21095:283;20586:798;;;;;:::o;15052:488::-;15150:4;15166:19;15212:1;15188:21;15207:1;15188:8;:18;;:21;;;;:::i;:::-;:25;15166:47;;;;15223:21;15258:254;15283:10;:17;15264:16;:36;15258:254;;;15319:61;15337:16;15355:8;15365:14;15319:10;:17;;:61;;;;;;:::i;:::-;15316:110;;;15407:4;15400:11;;;;;;15316:110;15500:1;15459:38;15480:16;15459:10;:20;;:38;;;;:::i;:::-;:42;15439:62;;;;;;15258:254;;;15528:5;15521:12;;;;15052:488;;;;;:::o;7507:821:5:-;7593:17;;:::i;:::-;7622:8;7642:6;7633;:15;7622:26;;7679:45;7349:1;7694:6;:29;7679:4;:14;;:45;;;;:::i;:::-;7658:4;:18;;:66;;;;;;;;;;;7747:36;7384:1;7762:6;:20;7747:4;:14;;:36;;;;:::i;:::-;7734:4;:10;;:49;;;;;;;;;;;7811:42;7424:1;7827:6;:25;7811:4;:15;;:42;;;;:::i;:::-;7793:4;:15;;:60;;;;;;;;;;;7863:16;7882:42;7465:1;7897:6;:26;7882:4;:14;;:42;;;;:::i;:::-;7863:61;;7499:1;7943:6;:19;7934:28;;7984:34;7999:6;8007:10;7984:34;;:4;:14;;:34;;;;;:::i;:::-;7972:4;:9;;:46;;;;8038:10;8028:20;;;;;;8058:16;8077:22;8092:6;8077:4;:14;;:22;;;;:::i;:::-;8058:41;;8131:2;8117:10;:16;;;;8109:25;;;;;;8154:1;8144:11;;;;8192:35;8208:6;8216:10;8192:35;;:4;:15;;:35;;;;;:::i;:::-;8165:4;:24;;:62;;;;;8247:10;8237:20;;;;;;8285:36;8300:6;8314;8308:3;:12;8285:4;:14;;:36;;;;;:::i;:::-;8267:4;:15;;:54;;;;7507:821;;;;;;;;:::o;8807:1054::-;8904:4;8920:16;8955:1;8945:6;:11;;;;8920:37;;8967:16;9010:1;9002:4;8993:6;:13;8992:19;;;;;;;;8967:45;;9022:19;9089:3;9080:6;:12;9069:1;9063:30;9050:44;;9056:1;9050:44;;;;9022:73;;9110:8;9121:6;9110:17;;9105:727;9135:6;:13;9129:3;:19;9105:727;;;9165:12;9180:21;9197:3;9180:6;:16;;:21;;;;:::i;:::-;9165:36;;9215:9;9227:25;9250:1;9244:3;:7;9227:6;:16;;:25;;;;:::i;:::-;9215:37;;9283:6;9270:19;;:10;:19;;;9266:556;;;9378:5;9371:12;;;;;;;;;;9266:556;9422:6;9408:20;;:10;:20;;;9404:418;;;9501:10;9494:17;;:3;:17;;;9490:138;;9604:5;9597:12;;;;;;;;;;9490:138;9712:1;9694:13;9653:38;9689:1;9676:10;9670:16;;:3;:16;:20;9653:6;:16;;:38;;;;:::i;:::-;:54;9652:61;;;;9645:68;;;;;;;;;;9404:418;9806:1;9800:3;:7;9793:14;;;;;;9105:727;;;;;;9849:5;9842:12;;;;;8807:1054;;;;;;:::o;14238:453:2:-;14359:4;14437:22;14462:26;14471:4;14477:10;14462:8;:26::i;:::-;14437:51;;14583:20;14606:30;14626:9;14606:19;:30::i;:::-;14583:53;;14672:12;14654:14;:30;14647:37;;;;14238:453;;;;;:::o;14892:154::-;14961:7;14987:52;15012:1;15020:17;15035:1;15020:4;:14;;:17;;;;:::i;:::-;15015:23;;14987:4;:24;;:52;;;;;:::i;:::-;14980:59;;14892:154;;;:::o;5330:122:0:-;5401:9;5435:4;5440:3;5435:9;;;;;;;;;;;;;;;;5429:16;;5422:23;;5330:122;;;;:::o;14697:189:2:-;14782:7;14808:12;:32;14821:4;:18;;;14808:32;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;14846:4;:9;;;14857:4;14863;:15;;;14808:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14801:78;;14697:189;;;;:::o;3831:182:5:-;3906:21;;:::i;:::-;3950:4;3939:3;:8;;:15;;;;3981:6;3964:3;:14;;:23;;;;;3997:9;4002:3;3997:4;:9::i;:::-;3831:182;;;;:::o;534:367::-;608:4;624:8;635:6;624:17;;651:215;658:4;651:215;;;691:4;:11;685:3;:17;678:25;;;;717:13;733:19;748:3;733:4;:14;;:19;;;;:::i;:::-;717:35;;;;784:1;773:8;:12;766:19;;;;815:1;803:8;:13;799:57;;;836:5;;;799:57;651:215;;;;888:6;882:3;:12;875:19;;;534:367;;;;:::o;9867:1296::-;9951:3;9970:18;9982:5;9970:4;:11;;:18;;;;:::i;:::-;9966:57;;;10011:1;10004:8;;;;9966:57;10033:8;10051:13;10074:12;10096:17;10123:11;10137:19;10148:4;10154:1;10137:10;:19::i;:::-;10123:33;;10166:16;10185:20;10196:5;10203:1;10185:10;:20::i;:::-;10166:39;;10309:128;10325:11;10316:6;:20;10309:128;;;10362:3;10352:13;;10385:19;10394:4;10400:3;10385:8;:19::i;:::-;10379:25;;10418:8;;;;;;;;10309:128;;;10447:154;10468:6;10454:11;:20;10447:154;;;10505:8;10490:23;;10538:25;10547:5;10554:8;10538;:25::i;:::-;10527:36;;10577:13;;;;;;;;10447:154;;;10669:246;10685:1;10676:6;:10;:48;;;;;10691:33;10703:3;10708:5;10715:8;10691:4;:11;;:33;;;;;;:::i;:::-;10690:34;10676:48;10669:246;;;10750:3;10740:13;;10773:19;10782:4;10788:3;10773:8;:19::i;:::-;10767:25;;10821:8;10806:23;;10854:25;10863:5;10870:8;10854;:25::i;:::-;10843:36;;10903:1;10893:11;;;;10669:246;;;10936:1;10929:3;:8;10925:48;;;10960:2;10953:9;;;;;;;;;;10925:48;10997:1;10985:8;:13;10982:51;;;11021:1;11014:8;;;;;;;;;;10982:51;11050:106;11073:1;11063:7;:11;11076:23;11091:7;11076:4;:14;;:23;;;;:::i;:::-;11050:106;;11101:5;11123:1;11108:12;:16;11126:29;11142:12;11126:5;:15;;:29;;;;:::i;:::-;11050:106;;:4;:12;;:106;;;;;;;;:::i;:::-;11043:113;;;;;;;;9867:1296;;;;;:::o;6163:227:0:-;6235:10;6276:4;:11;6271:1;6265:3;:7;:22;;6257:31;;;;;;6363:10;6356:3;6352:1;6346:4;6342:12;6338:22;6332:29;6328:46;6321:53;;6307:77;;;;:::o;7913:549::-;8033:165;8047:2;8040:3;:9;8033:165;;8122:3;8116:10;8110:4;8103:24;8162:2;8154:10;;;;8185:2;8178:9;;;;8058:2;8051:9;;;;8033:165;;;8240:9;8272:1;8265:3;8260:2;:8;8252:3;:17;:21;8240:33;;8341:4;8337:9;8331:3;8325:10;8321:26;8393:4;8386;8380:11;8376:22;8437:7;8427:8;8424:21;8418:4;8411:35;8292:164;;;;;;:::o;1126:186:5:-;1198:16;1226:8;1237:24;1248:4;1254:6;1237:10;:24::i;:::-;1226:35;;1278:27;1293:6;1301:3;1278:4;:14;;:27;;;;;:::i;:::-;1271:34;;;1126:186;;;;:::o;5286:166::-;5346:12;5377:68;5397:4;:11;;;5410:34;5421:4;:9;;;5432:4;:11;;;5410:10;:34::i;:::-;5377:4;:9;;;:19;;:68;;;;;:::i;:::-;5370:75;;5286:166;;;:::o;3276:209:0:-;3395:4;3447:31;3454:5;3461:11;3474:3;3447:6;:31::i;:::-;3418:25;3425:4;3431:6;3439:3;3418:6;:25::i;:::-;:60;3411:67;;3276:209;;;;;;;:::o;3868:239::-;3977:4;4046:54;4053:5;4060:11;4088;4073:5;:12;:26;4046:6;:54::i;:::-;4000:42;4007:4;4013:6;4035;4021:4;:11;:20;4000:6;:42::i;:::-;:100;3993:107;;3868:239;;;;;;:::o;24345:698:2:-;24486:4;24506:30;;:::i;:::-;24539:11;:5;:9;:11::i;:::-;24506:44;;24502:513;24553:11;:4;:9;:11::i;:::-;24502:513;;879:2;24601:30;;:4;:12;;;:30;;;24593:39;;;;;;24646:21;24670:12;:4;:10;:12::i;:::-;24646:36;;24696:28;;:::i;:::-;24727:39;24747:1;24750:8;:15;24727:8;:19;;:39;;;;;:::i;:::-;24696:70;;24784:53;24807:6;24815:8;24825:5;24832:4;24784:22;:53::i;:::-;24780:225;;;24937:53;24953:11;:4;:9;:11::i;:::-;24966:5;24973:6;24981:8;24937:15;:53::i;:::-;24930:60;;;;;;;24780:225;24502:513;;24566:11;:4;:9;:11::i;:::-;24502:513;;;;25031:5;25024:12;;24345:698;;;;;;:::o;21743:659::-;21890:4;21992:37;22012:5;:16;;;21992:12;:5;:10;:12::i;:::-;:19;;:37;;;;:::i;:::-;21984:46;;;;;;22040:356;22047:12;:5;:10;:12::i;:::-;22040:356;;22097:37;22117:5;:16;;;22097:12;:5;:10;:12::i;:::-;:19;;:37;;;;:::i;:::-;22089:46;;;;;;22149:21;22173:13;:5;:11;:13::i;:::-;22149:37;;22200:28;;:::i;:::-;22231:39;22251:1;22254:8;:15;22231:8;:19;;:39;;;;;:::i;:::-;22200:70;;22287:53;22310:6;22318:8;22328:5;22335:4;22287:22;:53::i;:::-;22284:102;;;22367:4;22360:11;;;;;;22284:102;22040:356;;22061:12;:5;:10;:12::i;:::-;22040:356;;;21743:659;;;;;;:::o;7583:324:0:-;7665:11;7703:2;7696:3;:9;;7688:18;;;;;;7737:4;:11;7730:3;7724;:9;:24;;7716:33;;;;;;7826:1;7819:3;7815:2;7811:12;7806:3;7802:22;7798:30;7794:35;7886:4;7878:3;7873:2;7867:4;7863:13;7859:23;7853:30;7849:42;7842:49;;7768:133;;;;;;:::o;9665:1398::-;9755:7;9789:2;9782:3;:9;;9774:18;;;;;;9803:8;9825:13;9852:6;9861:1;9852:10;;9848:350;9868:3;9864:1;:7;9848:350;;;9892:11;9906:4;9917:1;9911:3;:7;9906:13;;;;;;;;;;;;;;;;9892:27;;9949:4;9941:12;;:4;:12;;;;;:28;;;;;9965:4;9957:12;;:4;:12;;;;;9941:28;9933:37;;;;;;10000:14;;;;;;;;;;;;;;;;;10035:4;10026;10020:11;;10015:17;;:24;10000:40;;;;;;;;;;;;;;;;9994:47;;9984:57;;10074:4;10063:7;:15;;;;10055:24;;;;;;10107:1;10101:3;:7;10096:1;:12;10093:55;;;10128:5;;;10093:55;10180:7;10167:20;;10175:1;10168:3;:8;;10167:20;10161:26;;9848:350;9873:3;;;;;;;9848:350;;;;10208:11;10228:1;10222:3;:7;10208:21;;10253:1;10248;10242:3;:7;;;;;;:12;10239:770;;;10341:7;10328:20;;10336:1;10329:3;:8;;10328:20;10322:26;;10239:770;;;10379:1;10374;10368:3;:7;;;;;;:12;10365:644;;;10472:1;10461:7;:12;;;;10447:27;;10455:1;10448:3;:8;;10447:27;10441:33;;10498:1;10488:11;;;;10365:644;;;10530:1;10525;10519:3;:7;;;;;;:12;10516:493;;;10625:1;10614:7;:12;;;;10600:27;;10608:1;10601:3;:8;;10600:27;10594:33;;10651:1;10641:11;;;;10516:493;;;10683:1;10678;10672:3;:7;;;;;;:12;10669:340;;;10778:1;10767:7;:12;;;;10753:27;;10761:1;10754:3;:8;;10753:27;10747:33;;10804:1;10794:11;;;;10669:340;;;10836:1;10831;10825:3;:7;;;;;;:12;10822:187;;;10932:1;10921:7;:12;;;;10907:27;;10915:1;10908:3;:8;;10907:27;10901:33;;10958:1;10948:11;;;;10822:187;;;10990:8;;;10822:187;10669:340;10516:493;10365:644;10239:770;11048:6;11042:3;:12;11034:3;:21;;11026:30;;11019:37;;;;;9665:1398;;;;;:::o;4912:176::-;4989:4;5027:5;:12;5012:4;:11;:27;:69;;;;;5043:38;5050:4;5056:1;5059:5;5066:1;5069:4;:11;5043:6;:38::i;:::-;5012:69;5005:76;;4912:176;;;;:::o;11169:128:5:-;11238:4;11271:19;11286:3;11271:4;:14;;:19;;;;:::i;:::-;11261:29;;11267:1;11261:3;:7;:29;11254:36;;11169:128;;;;:::o;1674:1184:0:-;1809:3;1824:13;1840:3;1824:19;;1868:3;1857:8;:14;1853:47;;;1892:8;1881:19;;1853:47;1911:12;1933:13;2013:2;2005:6;2001:15;1995:4;1991:26;1980:37;;2070:2;2057:11;2053:20;2046:5;2042:32;2030:44;;2098:8;2093:717;2118:8;2112:3;:14;2093:717;;;2153:6;2173;2231:7;2225:14;2220:19;;2267:8;2261:15;2256:20;;2312:1;2307;:6;2303:442;;2394:9;2436:2;2425:8;:13;2421:192;;;2477:3;2462:19;;2421:192;;;2592:1;2584:3;2573:8;2568:2;:13;:19;2563:1;:25;2557:1;:32;:36;2555:39;2548:46;;2421:192;2630:9;2660:4;2656:1;:8;2647:4;2643:1;:8;2642:23;2630:35;;2695:1;2687:4;:9;2683:47;;2725:4;2714:16;;;;;;;;;;;;2683:47;2303:442;;;2769:2;2758:13;;;;2797:2;2785:14;;;;2093:717;;2135:2;2128:9;;;;2093:717;;;;2842:8;2831:3;2827:24;2820:31;;;;;1674:1184;;;;;;;;;:::o;305:238::-;386:11;433:4;:11;426:3;417:6;:12;:27;;409:36;;;;;;523:3;514:6;509:2;503:4;499:13;495:26;485:42;478:49;;464:73;;;;;:::o;5625:172:5:-;5686:12;5717:73;5737:4;:16;;;5773:4;:16;;;5755:4;:15;;;:34;5717:4;:9;;;:19;;:73;;;;;:::i;:::-;5710:80;;5625:172;;;:::o;6079:398::-;6166:18;;:::i;:::-;6209:38;5832:1;6225:6;:21;6209:4;:15;;:38;;;;:::i;:::-;6196:4;:10;;:51;;;;;;;;;;;6273:40;5871:1;6288:6;:24;6273:4;:14;;:40;;;;:::i;:::-;6257:4;:13;;:56;;;;;;;;;;;6340:41;5911:1;6355:6;:25;6340:4;:14;;:41;;;;:::i;:::-;6323:4;:14;;:58;;;;;;;;;;;6408:62;5948:1;6423:6;:22;5948:1;6447:6;:22;6408:4;:14;;:62;;;;;:::i;:::-;6391:4;:14;;:79;;;;6079:398;;;;;:::o;22745:1196:2:-;22941:4;23117:1;23098:6;:15;;;:20;;;23095:62;;23141:5;23134:12;;;;23095:62;23391:5;:15;;;23371:35;;:6;:16;;;:35;;;23368:77;;23429:5;23422:12;;;;23368:77;23454:21;23478:23;23492:8;23478:13;:23::i;:::-;23454:47;;23533:5;:12;;;23515:30;;:14;:30;;;23511:73;;23568:5;23561:12;;;;;23511:73;23810:1;964:5;23772:6;:12;;;:34;;;:39;23768:82;;;23834:5;23827:12;;;;;23768:82;23867:10;:28;23878:6;:16;;;23867:28;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;23903:8;23913:4;:10;;;23925:4;:8;;;23867:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23860:74;;;22745:1196;;;;;;;:::o;25406:909::-;25570:4;25590:13;25606:23;25620:8;25606:13;:23::i;:::-;25590:39;;25639:648;25647:12;:5;:10;:12::i;:::-;25639:648;;25689:18;25710:13;:5;:11;:13::i;:::-;25689:34;;25737:20;;:::i;:::-;25760:74;25778:5;:17;;;25816:5;:17;;;25797:5;:16;;;:36;25760:5;:10;;;:17;;:74;;;;;:::i;:::-;25737:97;;25864:6;25851:19;;:2;:9;;;:19;;;25848:65;;25890:8;;;;25848:65;25946:6;:16;;;25930:32;;:2;:12;;;:32;;;25926:79;;25982:8;;;;25926:79;26019:24;;:::i;:::-;26057:42;26083:8;:15;26066:7;:14;:32;26057:3;:8;;:42;;;;:::i;:::-;;26113:19;26124:7;26113:3;:10;;:19;;;;:::i;:::-;;26146:20;26157:8;26146:3;:10;;:20;;;;:::i;:::-;;26184:47;26197:2;:13;;;26212:3;:7;;;26221:2;:9;;;26184:12;:47::i;:::-;26180:97;;;26258:4;26251:11;;;;;;;;26180:97;25639:648;;;;25661:12;:5;:10;:12::i;:::-;25639:648;;;26303:5;26296:12;;;25406:909;;;;;;;:::o;27041:279::-;27106:6;27124:7;27146:6;27141:133;27162:4;:11;27158:1;:15;27141:133;;;27209:1;27204;27200;:5;:10;:63;;27246:17;27261:1;27246:4;:14;;:17;;;;:::i;:::-;27200:63;;;;;27242:1;27220:17;27235:1;27220:4;:14;;:17;;;;:::i;:::-;27213:25;;:30;;;;27200:63;27194:69;;;;;;27175:3;;;;;;;27141:133;;;;27309:2;27303;:8;;27297:2;:15;27283:30;;;27041:279;;;:::o;6745:375:5:-;6828:14;;:::i;:::-;6868:36;6511:1;6884:6;:19;6868:4;:15;;:36;;;;:::i;:::-;6854:4;:11;;:50;;;;;;;;;;;6931:37;6547:1;6946:6;:21;6931:4;:14;;:37;;;;:::i;:::-;6914:4;:14;;:54;;;;;;;;;;;6996:39;6585:1;7011:6;:23;6996:4;:14;;:39;;;;:::i;:::-;6978:4;:15;;:57;;;;;;;;;;;7059:54;6618:1;7074:6;:18;6618:1;7094:6;:18;7059:4;:14;;:54;;;;;:::i;:::-;7045:4;:11;;:68;;;;6745:375;;;;;:::o;978:455:20:-;1048:13;;:::i;:::-;1094:1;1088:2;1077:8;:13;;;;;;:18;1073:81;;1140:2;1129:8;:13;;;;;;1123:2;:20;1111:32;;;;1073:81;1224:8;1209:3;:12;;:23;;;;;1282:4;1276:11;1312:3;1307;1300:16;1341:1;1336:3;1329:14;1386:8;1381:3;1377:18;1373:2;1369:27;1363:4;1356:41;1251:156;1423:3;1416:10;;978:455;;;;:::o;4946:161::-;5023:13;;:::i;:::-;5055:45;5061:3;5066;:7;;;:14;5082:4;5088;:11;5055:5;:45::i;:::-;5048:52;;4946:161;;;;:::o;26609:267:2:-;26712:4;26772:1;26732:42;;26740:7;:19;26748:10;26740:19;;;;;;;;;;;;;;;;;;;;;;;;;26732:42;;;26728:85;;;26797:5;26790:12;;;;26728:85;26829:7;:19;26837:10;26829:19;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;26856:4;26862:6;26829:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26822:47;;26609:267;;;;;;:::o;2875:1326:20:-;2970:13;;:::i;:::-;3010:4;:11;3003:3;:18;;2995:27;;;;;;3049:3;:12;;;3043:3;3037;:9;:24;3033:100;;;3077:45;3084:3;3120:1;3089:28;3093:3;:12;;;3113:3;3107;:9;3089:3;:28::i;:::-;:32;3077:6;:45::i;:::-;3033:100;3143:9;3162:8;3272:3;3266:10;3355:6;3349:13;3483:3;3478:2;3470:6;3466:15;3462:25;3454:33;;3579:6;3573:3;3568;3564:13;3561:25;3558:2;;;3629:3;3624;3620:13;3612:6;3605:29;3558:2;3678;3672:4;3668:13;3661:20;;3189:502;;3751:165;3765:2;3758:3;:9;3751:165;;3840:3;3834:10;3828:4;3821:24;3880:2;3872:10;;;;3903:2;3896:9;;;;3776:2;3769:9;;;;3751:165;;;3958:9;3990:1;3983:3;3978:2;:8;3970:3;:17;:21;3958:33;;4059:4;4055:9;4049:3;4043:10;4039:26;4111:4;4104;4098:11;4094:22;4155:7;4145:8;4142:21;4136:4;4129:35;4010:164;;4191:3;4184:10;;;;;2875:1326;;;;;;:::o;2035:134::-;2085:4;2109:1;2105;:5;2101:44;;;2133:1;2126:8;;;;2101:44;2161:1;2154:8;;2035:134;;;;;:::o;1862:167::-;1935:19;1957:3;:7;;;1935:29;;1974:19;1979:3;1984:8;1974:4;:19::i;:::-;;2003;2010:3;2015:6;2003;:19::i;:::-;;1862:167;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;7:139:22:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:143::-;;383:6;377:13;368:22;;399:33;426:5;399:33;:::i;:::-;358:80;;;;:::o;457:351::-;;;574:3;567:4;559:6;555:17;551:27;541:2;;592:1;589;582:12;541:2;628:6;615:20;605:30;;658:18;650:6;647:30;644:2;;;690:1;687;680:12;644:2;727:4;719:6;715:17;703:29;;781:3;773:4;765:6;761:17;751:8;747:32;744:41;741:2;;;798:1;795;788:12;741:2;531:277;;;;;:::o;814:464::-;;918:3;911:4;903:6;899:17;895:27;885:2;;936:1;933;926:12;885:2;976:6;963:20;1001:64;1016:48;1057:6;1016:48;:::i;:::-;1001:64;:::i;:::-;992:73;;1088:6;1081:5;1074:21;1127:4;1119:6;1115:17;1163:4;1156:5;1152:16;1201:3;1192:6;1187:3;1183:16;1180:25;1177:2;;;1218:1;1215;1208:12;1177:2;1231:41;1265:6;1260:3;1255;1231:41;:::i;:::-;875:403;;;;;;;:::o;1284:175::-;;1386:6;1373:20;1364:29;;1402:51;1447:5;1402:51;:::i;:::-;1354:105;;;;:::o;1465:169::-;;1564:6;1551:20;1542:29;;1580:48;1622:5;1580:48;:::i;:::-;1532:102;;;;:::o;1640:179::-;;1744:6;1731:20;1722:29;;1760:53;1807:5;1760:53;:::i;:::-;1712:107;;;;:::o;1865:718::-;;1993:4;1981:9;1976:3;1972:19;1968:30;1965:2;;;2011:1;2008;2001:12;1965:2;2033:20;2048:4;2033:20;:::i;:::-;2024:29;;2141:1;2130:9;2126:17;2113:31;2171:18;2163:6;2160:30;2157:2;;;2203:1;2200;2193:12;2157:2;2245:58;2299:3;2290:6;2279:9;2275:22;2245:58;:::i;:::-;2238:4;2231:5;2227:16;2220:84;2063:252;2401:2;2390:9;2386:18;2373:32;2432:18;2424:6;2421:30;2418:2;;;2464:1;2461;2454:12;2418:2;2506:58;2560:3;2551:6;2540:9;2536:22;2506:58;:::i;:::-;2499:4;2492:5;2488:16;2481:84;2325:251;1955:628;;;;:::o;2589:137::-;;2672:6;2659:20;2650:29;;2688:32;2714:5;2688:32;:::i;:::-;2640:86;;;;:::o;2732:135::-;;2814:6;2801:20;2792:29;;2830:31;2855:5;2830:31;:::i;:::-;2782:85;;;;:::o;2873:260::-;;2981:2;2969:9;2960:7;2956:23;2952:32;2949:2;;;2997:1;2994;2987:12;2949:2;3039:1;3063:53;3108:7;3099:6;3088:9;3084:22;3063:53;:::i;:::-;3053:63;;3011:115;2939:194;;;;:::o;3139:276::-;;3255:2;3243:9;3234:7;3230:23;3226:32;3223:2;;;3271:1;3268;3261:12;3223:2;3313:1;3337:61;3390:7;3381:6;3370:9;3366:22;3337:61;:::i;:::-;3327:71;;3285:123;3213:202;;;;:::o;3421:282::-;;3540:2;3528:9;3519:7;3515:23;3511:32;3508:2;;;3556:1;3553;3546:12;3508:2;3598:1;3622:64;3678:7;3669:6;3658:9;3654:22;3622:64;:::i;:::-;3612:74;;3570:126;3498:205;;;;:::o;3709:625::-;;;3852:2;3840:9;3831:7;3827:23;3823:32;3820:2;;;3868:1;3865;3858:12;3820:2;3938:1;3927:9;3923:17;3910:31;3968:18;3960:6;3957:30;3954:2;;;4000:1;3997;3990:12;3954:2;4027:62;4081:7;4072:6;4061:9;4057:22;4027:62;:::i;:::-;4017:72;;3882:217;4165:2;4154:9;4150:18;4137:32;4196:18;4188:6;4185:30;4182:2;;;4228:1;4225;4218:12;4182:2;4255:62;4309:7;4300:6;4289:9;4285:22;4255:62;:::i;:::-;4245:72;;4109:218;3810:524;;;;;:::o;4340:677::-;;;4509:2;4497:9;4488:7;4484:23;4480:32;4477:2;;;4525:1;4522;4515:12;4477:2;4595:1;4584:9;4580:17;4567:31;4625:18;4617:6;4614:30;4611:2;;;4657:1;4654;4647:12;4611:2;4684:88;4764:7;4755:6;4744:9;4740:22;4684:88;:::i;:::-;4674:98;;4539:243;4848:2;4837:9;4833:18;4820:32;4879:18;4871:6;4868:30;4865:2;;;4911:1;4908;4901:12;4865:2;4938:62;4992:7;4983:6;4972:9;4968:22;4938:62;:::i;:::-;4928:72;;4792:218;4467:550;;;;;:::o;5023:532::-;;;;5166:2;5154:9;5145:7;5141:23;5137:32;5134:2;;;5182:1;5179;5172:12;5134:2;5224:1;5248:52;5292:7;5283:6;5272:9;5268:22;5248:52;:::i;:::-;5238:62;;5196:114;5376:2;5365:9;5361:18;5348:32;5407:18;5399:6;5396:30;5393:2;;;5439:1;5436;5429:12;5393:2;5474:64;5530:7;5521:6;5510:9;5506:22;5474:64;:::i;:::-;5456:82;;;;5320:228;5124:431;;;;;:::o;5561:1073::-;;;;;5772:3;5760:9;5751:7;5747:23;5743:33;5740:2;;;5789:1;5786;5779:12;5740:2;5831:1;5855:52;5899:7;5890:6;5879:9;5875:22;5855:52;:::i;:::-;5845:62;;5803:114;5983:2;5972:9;5968:18;5955:32;6014:18;6006:6;6003:30;6000:2;;;6046:1;6043;6036:12;6000:2;6073:62;6127:7;6118:6;6107:9;6103:22;6073:62;:::i;:::-;6063:72;;5927:218;6211:2;6200:9;6196:18;6183:32;6242:18;6234:6;6231:30;6228:2;;;6274:1;6271;6264:12;6228:2;6301:88;6381:7;6372:6;6361:9;6357:22;6301:88;:::i;:::-;6291:98;;6155:244;6465:2;6454:9;6450:18;6437:32;6496:18;6488:6;6485:30;6482:2;;;6528:1;6525;6518:12;6482:2;6555:62;6609:7;6600:6;6589:9;6585:22;6555:62;:::i;:::-;6545:72;;6409:218;5730:904;;;;;;;:::o;6640:1380::-;;;;;;6903:3;6891:9;6882:7;6878:23;6874:33;6871:2;;;6920:1;6917;6910:12;6871:2;6962:1;6986:52;7030:7;7021:6;7010:9;7006:22;6986:52;:::i;:::-;6976:62;;6934:114;7114:2;7103:9;7099:18;7086:32;7145:18;7137:6;7134:30;7131:2;;;7177:1;7174;7167:12;7131:2;7204:62;7258:7;7249:6;7238:9;7234:22;7204:62;:::i;:::-;7194:72;;7058:218;7342:2;7331:9;7327:18;7314:32;7373:18;7365:6;7362:30;7359:2;;;7405:1;7402;7395:12;7359:2;7432:88;7512:7;7503:6;7492:9;7488:22;7432:88;:::i;:::-;7422:98;;7286:244;7596:2;7585:9;7581:18;7568:32;7627:18;7619:6;7616:30;7613:2;;;7659:1;7656;7649:12;7613:2;7686:88;7766:7;7757:6;7746:9;7742:22;7686:88;:::i;:::-;7676:98;;7540:244;7850:3;7839:9;7835:19;7822:33;7882:18;7874:6;7871:30;7868:2;;;7914:1;7911;7904:12;7868:2;7941:62;7995:7;7986:6;7975:9;7971:22;7941:62;:::i;:::-;7931:72;;7794:219;6861:1159;;;;;;;;:::o;8026:256::-;;8132:2;8120:9;8111:7;8107:23;8103:32;8100:2;;;8148:1;8145;8138:12;8100:2;8190:1;8214:51;8257:7;8248:6;8237:9;8233:22;8214:51;:::i;:::-;8204:61;;8162:113;8090:192;;;;:::o;8288:435::-;;;8429:2;8417:9;8408:7;8404:23;8400:32;8397:2;;;8445:1;8442;8435:12;8397:2;8487:1;8511:51;8554:7;8545:6;8534:9;8530:22;8511:51;:::i;:::-;8501:61;;8459:113;8610:2;8635:71;8698:7;8689:6;8678:9;8674:22;8635:71;:::i;:::-;8625:81;;8582:134;8387:336;;;;;:::o;8729:429::-;;;8867:2;8855:9;8846:7;8842:23;8838:32;8835:2;;;8883:1;8880;8873:12;8835:2;8925:1;8949:51;8992:7;8983:6;8972:9;8968:22;8949:51;:::i;:::-;8939:61;;8897:113;9048:2;9073:68;9133:7;9124:6;9113:9;9109:22;9073:68;:::i;:::-;9063:78;;9020:131;8825:333;;;;;:::o;9164:439::-;;;9307:2;9295:9;9286:7;9282:23;9278:32;9275:2;;;9323:1;9320;9313:12;9275:2;9365:1;9389:51;9432:7;9423:6;9412:9;9408:22;9389:51;:::i;:::-;9379:61;;9337:113;9488:2;9513:73;9578:7;9569:6;9558:9;9554:22;9513:73;:::i;:::-;9503:83;;9460:136;9265:338;;;;;:::o;9609:118::-;9696:24;9714:5;9696:24;:::i;:::-;9691:3;9684:37;9674:53;;:::o;9733:118::-;9820:24;9838:5;9820:24;:::i;:::-;9815:3;9808:37;9798:53;;:::o;9879:314::-;;10014:88;10095:6;10090:3;10014:88;:::i;:::-;10007:95;;10112:43;10148:6;10143:3;10136:5;10112:43;:::i;:::-;10180:6;10175:3;10171:16;10164:23;;9997:196;;;;;:::o;10199:360::-;;10313:38;10345:5;10313:38;:::i;:::-;10367:70;10430:6;10425:3;10367:70;:::i;:::-;10360:77;;10446:52;10491:6;10486:3;10479:4;10472:5;10468:16;10446:52;:::i;:::-;10523:29;10545:6;10523:29;:::i;:::-;10518:3;10514:39;10507:46;;10289:270;;;;;:::o;10565:167::-;10670:55;10719:5;10670:55;:::i;:::-;10665:3;10658:68;10648:84;;:::o;10738:161::-;10840:52;10886:5;10840:52;:::i;:::-;10835:3;10828:65;10818:81;;:::o;10905:171::-;11012:57;11063:5;11012:57;:::i;:::-;11007:3;11000:70;10990:86;;:::o;11082:318::-;;11245:67;11309:2;11304:3;11245:67;:::i;:::-;11238:74;;11342:22;11338:1;11333:3;11329:11;11322:43;11391:2;11386:3;11382:12;11375:19;;11228:172;;;:::o;11406:129::-;11492:36;11522:5;11492:36;:::i;:::-;11487:3;11480:49;11470:65;;:::o;11541:115::-;11626:23;11643:5;11626:23;:::i;:::-;11621:3;11614:36;11604:52;;:::o;11662:115::-;11747:23;11764:5;11747:23;:::i;:::-;11742:3;11735:36;11725:52;;:::o;11783:112::-;11866:22;11882:5;11866:22;:::i;:::-;11861:3;11854:35;11844:51;;:::o;11901:291::-;;12063:103;12162:3;12153:6;12145;12063:103;:::i;:::-;12056:110;;12183:3;12176:10;;12045:147;;;;;:::o;12198:222::-;;12329:2;12318:9;12314:18;12306:26;;12342:71;12410:1;12399:9;12395:17;12386:6;12342:71;:::i;:::-;12296:124;;;;:::o;12426:309::-;;12575:2;12564:9;12560:18;12552:26;;12624:9;12618:4;12614:20;12610:1;12599:9;12595:17;12588:47;12652:76;12723:4;12714:6;12652:76;:::i;:::-;12644:84;;12542:193;;;;:::o;12741:506::-;;12936:2;12925:9;12921:18;12913:26;;12985:9;12979:4;12975:20;12971:1;12960:9;12956:17;12949:47;13013:76;13084:4;13075:6;13013:76;:::i;:::-;13005:84;;13136:9;13130:4;13126:20;13121:2;13110:9;13106:18;13099:48;13164:76;13235:4;13226:6;13164:76;:::i;:::-;13156:84;;12903:344;;;;;:::o;13253:703::-;;13494:2;13483:9;13479:18;13471:26;;13543:9;13537:4;13533:20;13529:1;13518:9;13514:17;13507:47;13571:76;13642:4;13633:6;13571:76;:::i;:::-;13563:84;;13694:9;13688:4;13684:20;13679:2;13668:9;13664:18;13657:48;13722:76;13793:4;13784:6;13722:76;:::i;:::-;13714:84;;13845:9;13839:4;13835:20;13830:2;13819:9;13815:18;13808:48;13873:76;13944:4;13935:6;13873:76;:::i;:::-;13865:84;;13461:495;;;;;;:::o;13962:614::-;;14184:2;14173:9;14169:18;14161:26;;14233:9;14227:4;14223:20;14219:1;14208:9;14204:17;14197:47;14261:76;14332:4;14323:6;14261:76;:::i;:::-;14253:84;;14384:9;14378:4;14374:20;14369:2;14358:9;14354:18;14347:48;14412:76;14483:4;14474:6;14412:76;:::i;:::-;14404:84;;14498:71;14565:2;14554:9;14550:18;14541:6;14498:71;:::i;:::-;14151:425;;;;;;:::o;14582:258::-;;14731:2;14720:9;14716:18;14708:26;;14744:89;14830:1;14819:9;14815:17;14806:6;14744:89;:::i;:::-;14698:142;;;;:::o;14846:252::-;;14992:2;14981:9;14977:18;14969:26;;15005:86;15088:1;15077:9;15073:17;15064:6;15005:86;:::i;:::-;14959:139;;;;:::o;15104:262::-;;15255:2;15244:9;15240:18;15232:26;;15268:91;15356:1;15345:9;15341:17;15332:6;15268:91;:::i;:::-;15222:144;;;;:::o;15372:419::-;;15576:2;15565:9;15561:18;15553:26;;15625:9;15619:4;15615:20;15611:1;15600:9;15596:17;15589:47;15653:131;15779:4;15653:131;:::i;:::-;15645:139;;15543:248;;;:::o;15797:434::-;;15980:2;15969:9;15965:18;15957:26;;15993:69;16059:1;16048:9;16044:17;16035:6;15993:69;:::i;:::-;16072:70;16138:2;16127:9;16123:18;16114:6;16072:70;:::i;:::-;16152:72;16220:2;16209:9;16205:18;16196:6;16152:72;:::i;:::-;15947:284;;;;;;:::o;16237:324::-;;16392:2;16381:9;16377:18;16369:26;;16405:67;16469:1;16458:9;16454:17;16445:6;16405:67;:::i;:::-;16482:72;16550:2;16539:9;16535:18;16526:6;16482:72;:::i;:::-;16359:202;;;;;:::o;16567:278::-;;16633:2;16627:9;16617:19;;16675:4;16667:6;16663:17;16782:6;16770:10;16767:22;16746:18;16734:10;16731:34;16728:62;16725:2;;;16793:13;;:::i;:::-;16725:2;16828:10;16824:2;16817:22;16607:238;;;;:::o;16851:326::-;;17002:18;16994:6;16991:30;16988:2;;;17024:13;;:::i;:::-;16988:2;17104:4;17100:9;17093:4;17085:6;17081:17;17077:33;17069:41;;17165:4;17159;17155:15;17147:23;;16917:260;;;:::o;17183:98::-;;17268:5;17262:12;17252:22;;17241:40;;;:::o;17287:168::-;;17404:6;17399:3;17392:19;17444:4;17439:3;17435:14;17420:29;;17382:73;;;;:::o;17461:147::-;;17599:3;17584:18;;17574:34;;;;:::o;17614:169::-;;17732:6;17727:3;17720:19;17772:4;17767:3;17763:14;17748:29;;17710:73;;;;:::o;17789:96::-;;17855:24;17873:5;17855:24;:::i;:::-;17844:35;;17834:51;;;:::o;17891:90::-;;17968:5;17961:13;17954:21;17943:32;;17933:48;;;:::o;17987:150::-;;18064:66;18057:5;18053:78;18042:89;;18032:105;;;:::o;18143:77::-;;18209:5;18198:16;;18188:32;;;:::o;18226:114::-;;18310:24;18328:5;18310:24;:::i;:::-;18299:35;;18289:51;;;:::o;18346:111::-;;18427:24;18445:5;18427:24;:::i;:::-;18416:35;;18406:51;;;:::o;18463:116::-;;18549:24;18567:5;18549:24;:::i;:::-;18538:35;;18528:51;;;:::o;18585:89::-;;18661:6;18654:5;18650:18;18639:29;;18629:45;;;:::o;18680:126::-;;18757:42;18750:5;18746:54;18735:65;;18725:81;;;:::o;18812:93::-;;18888:10;18881:5;18877:22;18866:33;;18856:49;;;:::o;18911:101::-;;18987:18;18980:5;18976:30;18965:41;;18955:57;;;:::o;19018:86::-;;19093:4;19086:5;19082:16;19071:27;;19061:43;;;:::o;19110:162::-;;19211:55;19260:5;19211:55;:::i;:::-;19198:68;;19188:84;;;:::o;19278:131::-;;19379:24;19397:5;19379:24;:::i;:::-;19366:37;;19356:53;;;:::o;19415:156::-;;19513:52;19559:5;19513:52;:::i;:::-;19500:65;;19490:81;;;:::o;19577:128::-;;19675:24;19693:5;19675:24;:::i;:::-;19662:37;;19652:53;;;:::o;19711:166::-;;19814:57;19865:5;19814:57;:::i;:::-;19801:70;;19791:86;;;:::o;19883:133::-;;19986:24;20004:5;19986:24;:::i;:::-;19973:37;;19963:53;;;:::o;20022:111::-;;20104:23;20121:5;20104:23;:::i;:::-;20091:36;;20081:52;;;:::o;20139:154::-;20223:6;20218:3;20213;20200:30;20285:1;20276:6;20271:3;20267:16;20260:27;20190:103;;;:::o;20299:307::-;20367:1;20377:113;20391:6;20388:1;20385:13;20377:113;;;20476:1;20471:3;20467:11;20461:18;20457:1;20452:3;20448:11;20441:39;20413:2;20410:1;20406:10;20401:15;;20377:113;;;20508:6;20505:1;20502:13;20499:2;;;20588:1;20579:6;20574:3;20570:16;20563:27;20499:2;20348:258;;;;:::o;20612:48::-;20645:9;20666:102;;20758:2;20754:7;20749:2;20742:5;20738:14;20734:28;20724:38;;20714:54;;;:::o;20774:122::-;20847:24;20865:5;20847:24;:::i;:::-;20840:5;20837:35;20827:2;;20886:1;20883;20876:12;20827:2;20817:79;:::o;20902:116::-;20972:21;20987:5;20972:21;:::i;:::-;20965:5;20962:32;20952:2;;21008:1;21005;20998:12;20952:2;20942:76;:::o;21024:122::-;21097:24;21115:5;21097:24;:::i;:::-;21090:5;21087:35;21077:2;;21136:1;21133;21126:12;21077:2;21067:79;:::o;21152:158::-;21243:42;21279:5;21243:42;:::i;:::-;21236:5;21233:53;21223:2;;21300:1;21297;21290:12;21223:2;21213:97;:::o;21316:152::-;21404:39;21437:5;21404:39;:::i;:::-;21397:5;21394:50;21384:2;;21458:1;21455;21448:12;21384:2;21374:94;:::o;21474:162::-;21567:44;21605:5;21567:44;:::i;:::-;21560:5;21557:55;21547:2;;21626:1;21623;21616:12;21547:2;21537:99;:::o;21642:120::-;21714:23;21731:5;21714:23;:::i;:::-;21707:5;21704:34;21694:2;;21752:1;21749;21742:12;21694:2;21684:78;:::o;21768:118::-;21839:22;21855:5;21839:22;:::i;:::-;21832:5;21829:33;21819:2;;21876:1;21873;21866:12;21819:2;21809:77;:::o",
  "source": "pragma solidity ^0.7.4;\npragma experimental ABIEncoderV2;\n\nimport \"./Owned.sol\";\nimport \"./BytesUtils.sol\";\nimport \"./RRUtils.sol\";\nimport \"./DNSSEC.sol\";\nimport \"./algorithms/Algorithm.sol\";\nimport \"./digests/Digest.sol\";\nimport \"./nsec3digests/NSEC3Digest.sol\";\nimport \"@ensdomains/buffer/contracts/Buffer.sol\";\n\n/*\n * @dev An oracle contract that verifies and stores DNSSEC-validated DNS records.\n *\n * TODO: Support for NSEC3 records\n */\ncontract DNSSECImpl is DNSSEC, Owned {\n    using Buffer for Buffer.buffer;\n    using BytesUtils for bytes;\n    using RRUtils for *;\n\n    uint16 constant DNSCLASS_IN = 1;\n\n    uint16 constant DNSTYPE_NS = 2;\n    uint16 constant DNSTYPE_SOA = 6;\n    uint16 constant DNSTYPE_DNAME = 39;\n    uint16 constant DNSTYPE_DS = 43;\n    uint16 constant DNSTYPE_RRSIG = 46;\n    uint16 constant DNSTYPE_NSEC = 47;\n    uint16 constant DNSTYPE_DNSKEY = 48;\n    uint16 constant DNSTYPE_NSEC3 = 50;\n\n    uint constant DNSKEY_FLAG_ZONEKEY = 0x100;\n\n    uint8 constant ALGORITHM_RSASHA256 = 8;\n\n    uint8 constant DIGEST_ALGORITHM_SHA256 = 2;\n\n    struct RRSet {\n        uint32 inception;\n        uint64 inserted;\n        bytes20 hash;\n    }\n\n    // (name, type) => RRSet\n    mapping (bytes32 => mapping(uint16 => RRSet)) rrsets;\n\n    mapping (uint8 => Algorithm) public algorithms;\n    mapping (uint8 => Digest) public digests;\n    mapping (uint8 => NSEC3Digest) public nsec3Digests;\n\n    event Test(uint t);\n    event Marker();\n\n    /**\n     * @dev Constructor.\n     * @param _anchors The binary format RR entries for the root DS records.\n     */\n    constructor(bytes memory _anchors) public {\n        // Insert the 'trust anchors' - the key hashes that start the chain\n        // of trust for all other records.\n        anchors = _anchors;\n        rrsets[keccak256(hex\"00\")][DNSTYPE_DS] = RRSet({\n            inception: uint32(0),\n            inserted: uint64(block.timestamp),\n            hash: bytes20(keccak256(anchors))\n        });\n        emit RRSetUpdated(hex\"00\", anchors);\n    }\n\n    /**\n     * @dev Sets the contract address for a signature verification algorithm.\n     *      Callable only by the owner.\n     * @param id The algorithm ID\n     * @param algo The address of the algorithm contract.\n     */\n    function setAlgorithm(uint8 id, Algorithm algo) public owner_only {\n        algorithms[id] = algo;\n        emit AlgorithmUpdated(id, address(algo));\n    }\n\n    /**\n     * @dev Sets the contract address for a digest verification algorithm.\n     *      Callable only by the owner.\n     * @param id The digest ID\n     * @param digest The address of the digest contract.\n     */\n    function setDigest(uint8 id, Digest digest) public owner_only {\n        digests[id] = digest;\n        emit DigestUpdated(id, address(digest));\n    }\n\n    /**\n     * @dev Sets the contract address for an NSEC3 digest algorithm.\n     *      Callable only by the owner.\n     * @param id The digest ID\n     * @param digest The address of the digest contract.\n     */\n    function setNSEC3Digest(uint8 id, NSEC3Digest digest) public owner_only {\n        nsec3Digests[id] = digest;\n        emit NSEC3DigestUpdated(id, address(digest));\n    }\n\n    /**\n     * @dev Submits multiple RRSets\n     * @param data The data to submit, as a series of chunks. Each chunk is\n     *        in the format <uint16 length><bytes input><uint16 length><bytes sig>\n     * @param _proof The DNSKEY or DS to validate the first signature against.\n     * @return The last RRSET submitted.\n     */\n    function submitRRSets(bytes memory data, bytes memory _proof) public override returns (bytes memory) {\n        uint offset = 0;\n        bytes memory proof = _proof;\n        while(offset < data.length) {\n            RRSetWithSignature memory input;\n            input.rrset = data.substring(offset + 2, data.readUint16(offset));\n            offset += input.rrset.length + 2;\n            input.sig = data.substring(offset + 2, data.readUint16(offset));\n            offset += input.sig.length + 2;\n            proof = _submitRRSet(input, proof);\n        }\n        return proof;\n    }\n\n    /**\n     * @dev Submits a signed set of RRs to the oracle.\n     *\n     * RRSETs are only accepted if they are signed with a key that is already\n     * trusted, or if they are self-signed, and the signing key is identified by\n     * a DS record that is already trusted.\n     *\n     * @param input The signed RR set. This is in the format described in section\n     *        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n     *        data, followed by a series of canonicalised RR records that the signature\n     *        applies to.\n     * @param proof The DNSKEY or DS to validate the signature against. Must Already\n     *        have been submitted and proved previously.\n     */\n    function submitRRSet(RRSetWithSignature memory input, bytes memory proof)\n        public override\n        returns (bytes memory)\n    {\n        return _submitRRSet(input, proof);\n    }\n\n    /**\n     * @dev Deletes an RR from the oracle.\n     *\n     * @param deleteType The DNS record type to delete.\n     * @param deleteName which you want to delete\n     * @param nsec The signed NSEC RRset. This is in the format described in section\n     *        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n     *        data, followed by a series of canonicalised RR records that the signature\n     *        applies to.\n     */\n    function deleteRRSet(uint16 deleteType, bytes memory deleteName, RRSetWithSignature memory nsec, bytes memory proof)\n        public override\n    {\n        RRUtils.SignedSet memory rrset;\n        rrset = validateSignedSet(nsec, proof);\n        require(rrset.typeCovered == DNSTYPE_NSEC);\n\n        // Don't let someone use an old proof to delete a new name\n        require(int32(rrset.inception - rrsets[keccak256(deleteName)][deleteType].inception) >= 0);\n\n        for (RRUtils.RRIterator memory iter = rrset.rrs(); !iter.done(); iter.next()) {\n            // We're dealing with three names here:\n            //   - deleteName is the name the user wants us to delete\n            //   - nsecName is the owner name of the NSEC record\n            //   - nextName is the next name specified in the NSEC record\n            //\n            // And three cases:\n            //   - deleteName equals nsecName, in which case we can delete the\n            //     record if it's not in the type bitmap.\n            //   - nextName comes after nsecName, in which case we can delete\n            //     the record if deleteName comes between nextName and nsecName.\n            //   - nextName comes before nsecName, in which case nextName is the\n            //     zone apex, and deleteName must come after nsecName.\n            checkNsecName(iter, rrset.name, deleteName, deleteType);\n            delete rrsets[keccak256(deleteName)][deleteType];\n            return;\n        }\n        // We should never reach this point\n        revert();\n    }\n\n    function checkNsecName(RRUtils.RRIterator memory iter, bytes memory nsecName, bytes memory deleteName, uint16 deleteType) private pure {\n        uint rdataOffset = iter.rdataOffset;\n        uint nextNameLength = iter.data.nameLength(rdataOffset);\n        uint rDataLength = iter.nextOffset - iter.rdataOffset;\n\n        // We assume that there is always typed bitmap after the next domain name\n        require(rDataLength > nextNameLength);\n\n        int compareResult = deleteName.compareNames(nsecName);\n        if(compareResult == 0) {\n            // Name to delete is on the same label as the NSEC record\n            require(!iter.data.checkTypeBitmap(rdataOffset + nextNameLength, deleteType));\n        } else {\n            // First check if the NSEC next name comes after the NSEC name.\n            bytes memory nextName = iter.data.substring(rdataOffset,nextNameLength);\n            // deleteName must come after nsecName\n            require(compareResult > 0);\n            if(nsecName.compareNames(nextName) < 0) {\n                // deleteName must also come before nextName\n                require(deleteName.compareNames(nextName) < 0);\n            }\n        }\n    }\n\n    /**\n     * @dev Deletes an RR from the oracle using an NSEC3 proof.\n     *      Deleting a record using NSEC3 requires using up to two NSEC3 records. There are two cases:\n     *       1. The name exists, but the record type doesn't. Eg, example.com has A records but no TXT records.\n     *       2. The name does not exist, but a parent name does.\n     *      In the first case, we submit one NSEC3 proof in `closestEncloser` that matches the target name\n     *      but does not have the bit for `deleteType` set in its type bitmap. In the second case, we submit\n     *      two proofs: closestEncloser and nextClosest, that together prove that the name does not exist.\n     *      NSEC3 records are in the format described in section 5.3.2 of RFC4035: The RRDATA section\n     *      from the RRSIG without the signature data, followed by a series of canonicalised RR records\n     *      that the signature applies to.\n     *\n     * @param deleteType The DNS record type to delete.\n     * @param deleteName The name to delete.\n     * @param closestEncloser An NSEC3 proof matching the closest enclosing name - that is,\n     *        the nearest ancestor of the target name that *does* exist.\n     * @param nextClosest An NSEC3 proof covering the next closest name. This proves that the immediate\n     *        subdomain of the closestEncloser does not exist.\n     * @param dnskey An encoded DNSKEY record that has already been submitted to the oracle and can be used\n     *        to verify the signatures closestEncloserSig and nextClosestSig\n     */\n    function deleteRRSetNSEC3(uint16 deleteType, bytes memory deleteName, RRSetWithSignature memory closestEncloser, RRSetWithSignature memory nextClosest, bytes memory dnskey)\n        public override\n    {\n        int32 originalInception = int32(rrsets[keccak256(deleteName)][deleteType].inception);\n\n        RRUtils.SignedSet memory ce = validateSignedSet(closestEncloser, dnskey);\n        checkNSEC3Validity(ce, deleteName, originalInception);\n\n        RRUtils.SignedSet memory nc;\n        if(nextClosest.rrset.length > 0) {\n            nc = validateSignedSet(nextClosest, dnskey);\n            checkNSEC3Validity(nc, deleteName, originalInception);\n        }\n\n        RRUtils.NSEC3 memory ceNSEC3 = readNSEC3(ce);\n        // The flags field must be 0 or 1 (RFC5155 section 8.2).\n        require(ceNSEC3.flags & 0xfe == 0);\n        // Check that the closest encloser is from the correct zone (RFC5155 section 8.3)\n        // \"The DNAME type bit must not be set and the NS type bit may only be set if the SOA type bit is set.\"\n        require(!ceNSEC3.checkTypeBitmap(DNSTYPE_DNAME) && (!ceNSEC3.checkTypeBitmap(DNSTYPE_NS) || ceNSEC3.checkTypeBitmap(DNSTYPE_SOA)));\n\n        // Case 1: deleteName does exist, but no records of RRTYPE deleteType do.\n        if(isMatchingNSEC3Record(deleteType, deleteName, ce.name, ceNSEC3)) {\n            delete rrsets[keccak256(deleteName)][deleteType];\n        // Case 2: deleteName does not exist.\n        } else if(isCoveringNSEC3Record(deleteType, deleteName, ce.name, ceNSEC3, nc.name, readNSEC3(nc))) {\n            delete rrsets[keccak256(deleteName)][deleteType];\n        } else {\n            revert();\n        }\n    }\n\n    function checkNSEC3Validity(RRUtils.SignedSet memory nsec, bytes memory deleteName, int32 originalInception) private pure {\n        // The records must have been signed after the record we're trying to delete\n        require(int32(nsec.inception) - originalInception >= 0);\n\n        // The record must be an NSEC3\n        require(nsec.typeCovered == DNSTYPE_NSEC3);\n\n        // nsecName is of the form <hash>.zone.xyz. <hash> is the NSEC3 hash of the entire name the NSEC3 record matches, while\n        // zone.xyz can be any ancestor of that name. We'll check that, so someone can't use a record on foo.com\n        // as proof of the nonexistence of bar.org.\n        require(checkNSEC3OwnerName(nsec.name, deleteName));\n    }\n\n    function isMatchingNSEC3Record(uint16 deleteType, bytes memory deleteName, bytes memory closestEncloserName, RRUtils.NSEC3 memory closestEncloser) private view returns(bool) {\n        // Check the record matches the hashed name, but the type bitmap does not include the type\n        if(checkNSEC3Name(closestEncloser, closestEncloserName, deleteName)) {\n            return !closestEncloser.checkTypeBitmap(deleteType);\n        }\n\n        return false;\n    }\n\n    function isCoveringNSEC3Record(uint16 deleteType, bytes memory deleteName, bytes memory ceName, RRUtils.NSEC3 memory ce, bytes memory ncName, RRUtils.NSEC3 memory nc) private view returns(bool) {\n        // The flags field must be 0 or 1 (RFC5155 section 8.2).\n        require(nc.flags & 0xfe == 0);\n\n        bytes32 ceNameHash = decodeOwnerNameHash(ceName);\n        bytes32 ncNameHash = decodeOwnerNameHash(ncName);\n\n        uint lastOffset = 0;\n        // Iterate over suffixes of the name to delete until one matches the closest encloser\n        for(uint offset = deleteName.readUint8(0) + 1; offset < deleteName.length; offset += deleteName.readUint8(offset) + 1) {\n            if(hashName(ce, deleteName.substring(offset, deleteName.length - offset)) == ceNameHash) {\n                // Check that the next closest record encloses the name one label longer\n                bytes32 checkHash = hashName(nc, deleteName.substring(lastOffset, deleteName.length - lastOffset));\n                if(ncNameHash < nc.nextHashedOwnerName) {\n                    return checkHash > ncNameHash && checkHash < nc.nextHashedOwnerName;\n                } else {\n                    return checkHash > ncNameHash || checkHash < nc.nextHashedOwnerName;\n                }\n            }\n            lastOffset = offset;\n        }\n        // If we reached the root without finding a match, return false.\n        return false;\n    }\n\n    function readNSEC3(RRUtils.SignedSet memory ss) private pure returns(RRUtils.NSEC3 memory) {\n        RRUtils.RRIterator memory iter = ss.rrs();\n        return iter.data.readNSEC3(iter.rdataOffset, iter.nextOffset - iter.rdataOffset);\n    }\n\n    function checkNSEC3Name(RRUtils.NSEC3 memory nsec, bytes memory ownerName, bytes memory deleteName) private view returns(bool) {\n        // Compute the NSEC3 name hash of the name to delete.\n        bytes32 deleteNameHash = hashName(nsec, deleteName);\n\n        // Decode the NSEC3 name hash from the first label of the NSEC3 owner name.\n        bytes32 nsecNameHash = decodeOwnerNameHash(ownerName);\n\n        return deleteNameHash == nsecNameHash;\n    }\n\n    function hashName(RRUtils.NSEC3 memory nsec, bytes memory name) private view returns(bytes32) {\n        return nsec3Digests[nsec.hashAlgorithm].hash(nsec.salt, name, nsec.iterations);\n    }\n\n    function decodeOwnerNameHash(bytes memory name) private pure returns(bytes32) {\n        return name.base32HexDecodeWord(1, uint(name.readUint8(0)));\n    }\n\n    function checkNSEC3OwnerName(bytes memory nsecName, bytes memory deleteName) private pure returns(bool) {\n        uint nsecNameOffset = nsecName.readUint8(0) + 1;\n        uint deleteNameOffset = 0;\n        while(deleteNameOffset < deleteName.length) {\n            if(deleteName.equals(deleteNameOffset, nsecName, nsecNameOffset)) {\n                return true;\n            }\n            deleteNameOffset += deleteName.readUint8(deleteNameOffset) + 1;\n        }\n        return false;\n    }\n\n    /**\n     * @dev Returns data about the RRs (if any) known to this oracle with the provided type and name.\n     * @param dnstype The DNS record type to query.\n     * @param name The name to query, in DNS label-sequence format.\n     * @return inception The unix timestamp at which the signature for this RRSET was created.\n     * @return inserted The unix timestamp at which this RRSET was inserted into the oracle.\n     * @return hash The hash of the RRset that was inserted.\n     */\n    function rrdata(uint16 dnstype, bytes calldata name) external override view returns (uint32, uint64, bytes20) {\n        RRSet storage result = rrsets[keccak256(name)][dnstype];\n        return (result.inception, result.inserted, result.hash);\n    }\n\n    function _submitRRSet(RRSetWithSignature memory input, bytes memory proof) internal returns (bytes memory) {\n        RRUtils.SignedSet memory rrset;\n        rrset = validateSignedSet(input, proof);\n\n        RRSet storage storedSet = rrsets[keccak256(rrset.name)][rrset.typeCovered];\n        if (storedSet.inserted > 0) {\n            // To replace an existing rrset, the signature must be at least as new\n            require(int32(rrset.inception - storedSet.inception) >= 0);\n        }\n\n        rrsets[keccak256(rrset.name)][rrset.typeCovered] = RRSet({\n            inception: rrset.inception,\n            inserted: uint64(block.timestamp),\n            hash: bytes20(keccak256(rrset.data))\n        });\n\n        emit RRSetUpdated(rrset.name, rrset.data);\n\n        return rrset.data;\n    }\n\n    /**\n     * @dev Submits a signed set of RRs to the oracle.\n     *\n     * RRSETs are only accepted if they are signed with a key that is already\n     * trusted, or if they are self-signed, and the signing key is identified by\n     * a DS record that is already trusted.\n     *\n     * @param input The signed RR set. This is in the format described in section\n     *        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n     *        data, followed by a series of canonicalised RR records that the signature\n     *        applies to.\n     * @param proof The DNSKEY or DS to validate the signature against. Must Already\n     *        have been submitted and proved previously.\n     */\n    function validateSignedSet(RRSetWithSignature memory input, bytes memory proof) internal view returns(RRUtils.SignedSet memory rrset) {\n        rrset = input.rrset.readSignedSet();\n        require(validProof(rrset.signerName, proof));\n\n        // Do some basic checks on the RRs and extract the name\n        bytes memory name = validateRRs(rrset, rrset.typeCovered);\n        require(name.labelCount(0) == rrset.labels);\n        rrset.name = name;\n\n        // All comparisons involving the Signature Expiration and\n        // Inception fields MUST use \"serial number arithmetic\", as\n        // defined in RFC 1982\n\n        // o  The validator's notion of the current time MUST be less than or\n        //    equal to the time listed in the RRSIG RR's Expiration field.\n        require(int32(rrset.expiration - block.timestamp) >= 0);\n\n        // o  The validator's notion of the current time MUST be greater than or\n        //    equal to the time listed in the RRSIG RR's Inception field.\n        require(int32(block.timestamp - rrset.inception) >= 0);\n\n        // Validate the signature\n        verifySignature(name, rrset, input, proof);\n\n        return rrset;\n    }\n\n    function validProof(bytes memory name, bytes memory proof) internal view returns(bool) {\n        uint16 dnstype = proof.readUint16(proof.nameLength(0));\n        return rrsets[keccak256(name)][dnstype].hash == bytes20(keccak256(proof));\n    }\n\n    /**\n     * @dev Validates a set of RRs.\n     * @param rrset The RR set.\n     * @param typecovered The type covered by the RRSIG record.\n     */\n    function validateRRs(RRUtils.SignedSet memory rrset, uint16 typecovered) internal pure returns (bytes memory name) {\n        // Iterate over all the RRs\n        for (RRUtils.RRIterator memory iter = rrset.rrs(); !iter.done(); iter.next()) {\n            // We only support class IN (Internet)\n            require(iter.class == DNSCLASS_IN);\n\n            if(name.length == 0) {\n                name = iter.name();\n            } else {\n                // Name must be the same on all RRs. We do things this way to avoid copying the name\n                // repeatedly.\n                require(name.length == iter.data.nameLength(iter.offset));\n                require(name.equals(0, iter.data, iter.offset, name.length));\n            }\n\n            // o  The RRSIG RR's Type Covered field MUST equal the RRset's type.\n            require(iter.dnstype == typecovered);\n        }\n    }\n\n    /**\n     * @dev Performs signature verification.\n     *\n     * Throws or reverts if unable to verify the record.\n     *\n     * @param name The name of the RRSIG record, in DNS label-sequence format.\n     * @param data The original data to verify.\n     * @param proof A DS or DNSKEY record that's already verified by the oracle.\n     */\n    function verifySignature(bytes memory name, RRUtils.SignedSet memory rrset, RRSetWithSignature memory data, bytes memory proof) internal view {\n        // o  The RRSIG RR's Signer's Name field MUST be the name of the zone\n        //    that contains the RRset.\n        require(rrset.signerName.length <= name.length);\n        require(rrset.signerName.equals(0, name, name.length - rrset.signerName.length));\n\n        RRUtils.RRIterator memory proofRR = proof.iterateRRs(0);\n        // Check the proof\n        if (proofRR.dnstype == DNSTYPE_DS) {\n            require(verifyWithDS(rrset, data, proofRR));\n        } else if (proofRR.dnstype == DNSTYPE_DNSKEY) {\n            require(verifyWithKnownKey(rrset, data, proofRR));\n        } else {\n            revert(\"No valid proof found\");\n        }\n    }\n\n    /**\n     * @dev Attempts to verify a signed RRSET against an already known public key.\n     * @param rrset The signed set to verify.\n     * @param data The original data the signed set was read from.\n     * @param proof The serialized DS or DNSKEY record to use as proof.\n     * @return True if the RRSET could be verified, false otherwise.\n     */\n    function verifyWithKnownKey(RRUtils.SignedSet memory rrset, RRSetWithSignature memory data, RRUtils.RRIterator memory proof) internal view returns(bool) {\n        // Check the DNSKEY's owner name matches the signer name on the RRSIG\n        require(proof.name().equals(rrset.signerName));\n        for(; !proof.done(); proof.next()) {\n            require(proof.name().equals(rrset.signerName));\n            bytes memory keyrdata = proof.rdata();\n            RRUtils.DNSKEY memory dnskey = keyrdata.readDNSKEY(0, keyrdata.length);\n            if(verifySignatureWithKey(dnskey, keyrdata, rrset, data)) {\n                return true;\n            }\n        }\n    }\n\n    /**\n     * @dev Attempts to verify some data using a provided key and a signature.\n     * @param dnskey The dns key record to verify the signature with.\n     * @param rrset The signed RRSET being verified.\n     * @param data The original data `rrset` was decoded from.\n     * @return True iff the key verifies the signature.\n     */\n    function verifySignatureWithKey(RRUtils.DNSKEY memory dnskey, bytes memory keyrdata, RRUtils.SignedSet memory rrset, RRSetWithSignature memory data)\n        internal\n        view\n        returns (bool)\n    {\n        // TODO: Check key isn't expired, unless updating key itself\n\n        // The Protocol Field MUST have value 3 (RFC4034 2.1.2)\n        if(dnskey.protocol != 3) {\n            return false;\n        }\n\n        // o The RRSIG RR's Signer's Name, Algorithm, and Key Tag fields MUST\n        //   match the owner name, algorithm, and key tag for some DNSKEY RR in\n        //   the zone's apex DNSKEY RRset.\n        if(dnskey.algorithm != rrset.algorithm) {\n            return false;\n        }\n        uint16 computedkeytag = computeKeytag(keyrdata);\n        if (computedkeytag != rrset.keytag) {\n            return false;\n        }\n\n        // o The matching DNSKEY RR MUST be present in the zone's apex DNSKEY\n        //   RRset, and MUST have the Zone Flag bit (DNSKEY RDATA Flag bit 7)\n        //   set.\n        if (dnskey.flags & DNSKEY_FLAG_ZONEKEY == 0) {\n            return false;\n        }\n\n        return algorithms[dnskey.algorithm].verify(keyrdata, data.rrset, data.sig);\n    }\n\n    /**\n     * @dev Attempts to verify a signed RRSET against an already known hash. This function assumes\n     *      that the record \n     * @param rrset The signed set to verify.\n     * @param data The original data the signed set was read from.\n     * @param proof The serialized DS or DNSKEY record to use as proof.\n     * @return True if the RRSET could be verified, false otherwise.\n     */\n    function verifyWithDS(RRUtils.SignedSet memory rrset, RRSetWithSignature memory data, RRUtils.RRIterator memory proof) internal view returns(bool) {\n        for(RRUtils.RRIterator memory iter = rrset.rrs(); !iter.done(); iter.next()) {\n            require(iter.dnstype == DNSTYPE_DNSKEY);\n            bytes memory keyrdata = iter.rdata();\n            RRUtils.DNSKEY memory dnskey = keyrdata.readDNSKEY(0, keyrdata.length);\n            if (verifySignatureWithKey(dnskey, keyrdata, rrset, data)) {\n                // It's self-signed - look for a DS record to verify it.\n                return verifyKeyWithDS(iter.name(), proof, dnskey, keyrdata);\n            }\n        }\n        return false;\n    }\n\n    /**\n     * @dev Attempts to verify a key using DS records.\n     * @param keyname The DNS name of the key, in DNS label-sequence format.\n     * @param dsrrs The DS records to use in verification.\n     * @param dnskey The dnskey to verify.\n     * @param keyrdata The RDATA section of the key.\n     * @return True if a DS record verifies this key.\n     */\n    function verifyKeyWithDS(bytes memory keyname, RRUtils.RRIterator memory dsrrs, RRUtils.DNSKEY memory dnskey, bytes memory keyrdata)\n        internal view returns (bool)\n    {\n        uint16 keytag = computeKeytag(keyrdata);\n        for (; !dsrrs.done(); dsrrs.next()) {\n            bytes memory rdata = dsrrs.rdata();\n            RRUtils.DS memory ds = dsrrs.data.readDS(dsrrs.rdataOffset, dsrrs.nextOffset - dsrrs.rdataOffset);\n            if(ds.keytag != keytag) {\n                continue;\n            }\n            if (ds.algorithm != dnskey.algorithm) {\n                continue;\n            }\n\n            Buffer.buffer memory buf;\n            buf.init(keyname.length + keyrdata.length);\n            buf.append(keyname);\n            buf.append(keyrdata);\n            if (verifyDSHash(ds.digestType, buf.buf, ds.digest)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * @dev Attempts to verify a DS record's hash value against some data.\n     * @param digesttype The digest ID from the DS record.\n     * @param data The data to digest.\n     * @param digest The digest data to check against.\n     * @return True iff the digest matches.\n     */\n    function verifyDSHash(uint8 digesttype, bytes memory data, bytes memory digest) internal view returns (bool) {\n        if (address(digests[digesttype]) == address(0)) {\n            return false;\n        }\n        return digests[digesttype].verify(data, digest);\n    }\n\n    /**\n     * @dev Computes the keytag for a chunk of data.\n     * @param data The data to compute a keytag for.\n     * @return The computed key tag.\n     */\n    function computeKeytag(bytes memory data) internal pure returns (uint16) {\n        uint ac;\n        for (uint i = 0; i < data.length; i++) {\n            ac += i & 1 == 0 ? uint16(data.readUint8(i)) << 8 : data.readUint8(i);\n        }\n        return uint16(ac + (ac >> 16));\n    }\n}\n",
  "sourcePath": "/home/arachnid/Dropbox/projects/enssec/contracts/DNSSECImpl.sol",
  "ast": {
    "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/DNSSECImpl.sol",
    "exportedSymbols": {
      "Algorithm": [
        3863
      ],
      "Buffer": [
        6432
      ],
      "BytesUtils": [
        730
      ],
      "DNSSEC": [
        820
      ],
      "DNSSECImpl": [
        2629
      ],
      "Digest": [
        5741
      ],
      "NSEC3Digest": [
        5847
      ],
      "Owned": [
        2724
      ],
      "RRUtils": [
        3847
      ]
    },
    "id": 2630,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 822,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "id": 823,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "24:33:2"
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/Owned.sol",
        "file": "./Owned.sol",
        "id": 824,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 2725,
        "src": "59:21:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/BytesUtils.sol",
        "file": "./BytesUtils.sol",
        "id": 825,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 731,
        "src": "81:26:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/RRUtils.sol",
        "file": "./RRUtils.sol",
        "id": 826,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 3848,
        "src": "108:23:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/DNSSEC.sol",
        "file": "./DNSSEC.sol",
        "id": 827,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 821,
        "src": "132:22:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/Algorithm.sol",
        "file": "./algorithms/Algorithm.sol",
        "id": 828,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 3864,
        "src": "155:36:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/digests/Digest.sol",
        "file": "./digests/Digest.sol",
        "id": 829,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 5742,
        "src": "192:30:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/nsec3digests/NSEC3Digest.sol",
        "file": "./nsec3digests/NSEC3Digest.sol",
        "id": 830,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 5848,
        "src": "223:40:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/buffer/contracts/Buffer.sol",
        "file": "@ensdomains/buffer/contracts/Buffer.sol",
        "id": 831,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 6433,
        "src": "264:49:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 832,
              "name": "DNSSEC",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 820,
              "src": "465:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DNSSEC_$820",
                "typeString": "contract DNSSEC"
              }
            },
            "id": 833,
            "nodeType": "InheritanceSpecifier",
            "src": "465:6:2"
          },
          {
            "baseName": {
              "id": 834,
              "name": "Owned",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2724,
              "src": "473:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Owned_$2724",
                "typeString": "contract Owned"
              }
            },
            "id": 835,
            "nodeType": "InheritanceSpecifier",
            "src": "473:5:2"
          }
        ],
        "contractDependencies": [
          820,
          2724
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 2629,
        "linearizedBaseContracts": [
          2629,
          2724,
          820
        ],
        "name": "DNSSECImpl",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 838,
            "libraryName": {
              "id": 836,
              "name": "Buffer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6432,
              "src": "491:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Buffer_$6432",
                "typeString": "library Buffer"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "485:31:2",
            "typeName": {
              "id": 837,
              "name": "Buffer.buffer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5974,
              "src": "502:13:2",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_buffer_$5974_storage_ptr",
                "typeString": "struct Buffer.buffer"
              }
            }
          },
          {
            "id": 841,
            "libraryName": {
              "id": 839,
              "name": "BytesUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 730,
              "src": "527:10:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesUtils_$730",
                "typeString": "library BytesUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "521:27:2",
            "typeName": {
              "id": 840,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "542:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 843,
            "libraryName": {
              "id": 842,
              "name": "RRUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3847,
              "src": "559:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RRUtils_$3847",
                "typeString": "library RRUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "553:20:2"
          },
          {
            "constant": true,
            "id": 846,
            "mutability": "constant",
            "name": "DNSCLASS_IN",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "579:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 844,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "579:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "31",
              "id": 845,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "609:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 849,
            "mutability": "constant",
            "name": "DNSTYPE_NS",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "617:30:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 847,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "617:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "32",
              "id": 848,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "646:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2_by_1",
                "typeString": "int_const 2"
              },
              "value": "2"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 852,
            "mutability": "constant",
            "name": "DNSTYPE_SOA",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "653:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 850,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "653:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "36",
              "id": 851,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "683:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_6_by_1",
                "typeString": "int_const 6"
              },
              "value": "6"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 855,
            "mutability": "constant",
            "name": "DNSTYPE_DNAME",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "690:34:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 853,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "690:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3339",
              "id": 854,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "722:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_39_by_1",
                "typeString": "int_const 39"
              },
              "value": "39"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 858,
            "mutability": "constant",
            "name": "DNSTYPE_DS",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "730:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 856,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "730:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3433",
              "id": 857,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "759:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_43_by_1",
                "typeString": "int_const 43"
              },
              "value": "43"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 861,
            "mutability": "constant",
            "name": "DNSTYPE_RRSIG",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "767:34:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 859,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "767:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3436",
              "id": 860,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "799:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_46_by_1",
                "typeString": "int_const 46"
              },
              "value": "46"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 864,
            "mutability": "constant",
            "name": "DNSTYPE_NSEC",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "807:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 862,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "807:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3437",
              "id": 863,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "838:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_47_by_1",
                "typeString": "int_const 47"
              },
              "value": "47"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 867,
            "mutability": "constant",
            "name": "DNSTYPE_DNSKEY",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "846:35:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 865,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "846:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3438",
              "id": 866,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "879:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_48_by_1",
                "typeString": "int_const 48"
              },
              "value": "48"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 870,
            "mutability": "constant",
            "name": "DNSTYPE_NSEC3",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "887:34:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 868,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "887:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3530",
              "id": 869,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "919:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_50_by_1",
                "typeString": "int_const 50"
              },
              "value": "50"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 873,
            "mutability": "constant",
            "name": "DNSKEY_FLAG_ZONEKEY",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "928:41:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 871,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "928:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3078313030",
              "id": 872,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "964:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_256_by_1",
                "typeString": "int_const 256"
              },
              "value": "0x100"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 876,
            "mutability": "constant",
            "name": "ALGORITHM_RSASHA256",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "976:38:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 874,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "976:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "38",
              "id": 875,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1013:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_8_by_1",
                "typeString": "int_const 8"
              },
              "value": "8"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 879,
            "mutability": "constant",
            "name": "DIGEST_ALGORITHM_SHA256",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1021:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 877,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1021:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "32",
              "id": 878,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1062:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2_by_1",
                "typeString": "int_const 2"
              },
              "value": "2"
            },
            "visibility": "internal"
          },
          {
            "canonicalName": "DNSSECImpl.RRSet",
            "id": 886,
            "members": [
              {
                "constant": false,
                "id": 881,
                "mutability": "mutable",
                "name": "inception",
                "nodeType": "VariableDeclaration",
                "scope": 886,
                "src": "1093:16:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 880,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1093:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 883,
                "mutability": "mutable",
                "name": "inserted",
                "nodeType": "VariableDeclaration",
                "scope": 886,
                "src": "1119:15:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 882,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1119:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 885,
                "mutability": "mutable",
                "name": "hash",
                "nodeType": "VariableDeclaration",
                "scope": 886,
                "src": "1144:12:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes20",
                  "typeString": "bytes20"
                },
                "typeName": {
                  "id": 884,
                  "name": "bytes20",
                  "nodeType": "ElementaryTypeName",
                  "src": "1144:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "RRSet",
            "nodeType": "StructDefinition",
            "scope": 2629,
            "src": "1070:93:2",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 892,
            "mutability": "mutable",
            "name": "rrsets",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1198:52:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
              "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet))"
            },
            "typeName": {
              "id": 891,
              "keyType": {
                "id": 887,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1207:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1198:45:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet))"
              },
              "valueType": {
                "id": 890,
                "keyType": {
                  "id": 888,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1226:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "nodeType": "Mapping",
                "src": "1218:24:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                  "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet)"
                },
                "valueType": {
                  "id": 889,
                  "name": "RRSet",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 886,
                  "src": "1236:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                    "typeString": "struct DNSSECImpl.RRSet"
                  }
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "c327deef",
            "id": 896,
            "mutability": "mutable",
            "name": "algorithms",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1257:46:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Algorithm_$3863_$",
              "typeString": "mapping(uint8 => contract Algorithm)"
            },
            "typeName": {
              "id": 895,
              "keyType": {
                "id": 893,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1266:5:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1257:28:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Algorithm_$3863_$",
                "typeString": "mapping(uint8 => contract Algorithm)"
              },
              "valueType": {
                "id": 894,
                "name": "Algorithm",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3863,
                "src": "1275:9:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Algorithm_$3863",
                  "typeString": "contract Algorithm"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "73cc48a6",
            "id": 900,
            "mutability": "mutable",
            "name": "digests",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1309:40:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
              "typeString": "mapping(uint8 => contract Digest)"
            },
            "typeName": {
              "id": 899,
              "keyType": {
                "id": 897,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1318:5:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1309:25:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
                "typeString": "mapping(uint8 => contract Digest)"
              },
              "valueType": {
                "id": 898,
                "name": "Digest",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 5741,
                "src": "1327:6:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Digest_$5741",
                  "typeString": "contract Digest"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "bd7ed31a",
            "id": 904,
            "mutability": "mutable",
            "name": "nsec3Digests",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1355:50:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_NSEC3Digest_$5847_$",
              "typeString": "mapping(uint8 => contract NSEC3Digest)"
            },
            "typeName": {
              "id": 903,
              "keyType": {
                "id": 901,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1364:5:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1355:30:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_NSEC3Digest_$5847_$",
                "typeString": "mapping(uint8 => contract NSEC3Digest)"
              },
              "valueType": {
                "id": 902,
                "name": "NSEC3Digest",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 5847,
                "src": "1373:11:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                  "typeString": "contract NSEC3Digest"
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 908,
            "name": "Test",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 906,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "t",
                  "nodeType": "VariableDeclaration",
                  "scope": 908,
                  "src": "1423:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 905,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1423:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1422:8:2"
            },
            "src": "1412:19:2"
          },
          {
            "anonymous": false,
            "id": 910,
            "name": "Marker",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 909,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1448:2:2"
            },
            "src": "1436:15:2"
          },
          {
            "body": {
              "id": 951,
              "nodeType": "Block",
              "src": "1617:395:2",
              "statements": [
                {
                  "expression": {
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 916,
                      "name": "anchors",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 735,
                      "src": "1746:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage",
                        "typeString": "bytes storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 917,
                      "name": "_anchors",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 913,
                      "src": "1756:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "1746:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage",
                      "typeString": "bytes storage ref"
                    }
                  },
                  "id": 919,
                  "nodeType": "ExpressionStatement",
                  "src": "1746:18:2"
                },
                {
                  "expression": {
                    "id": 944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 920,
                          "name": "rrsets",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 892,
                          "src": "1774:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                          }
                        },
                        "id": 925,
                        "indexExpression": {
                          "arguments": [
                            {
                              "hexValue": "00",
                              "id": 922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "hexString",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1791:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
                                "typeString": "literal_string hex\"00\""
                              },
                              "value": "\u0000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
                                "typeString": "literal_string hex\"00\""
                              }
                            ],
                            "id": 921,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "1781:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1781:18:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1774:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                          "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                        }
                      },
                      "id": 926,
                      "indexExpression": {
                        "id": 924,
                        "name": "DNSTYPE_DS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 858,
                        "src": "1801:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1774:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_storage",
                        "typeString": "struct DNSSECImpl.RRSet storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 930,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1853:1:2",
                              "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": 929,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1846:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint32_$",
                              "typeString": "type(uint32)"
                            },
                            "typeName": {
                              "id": 928,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1846:6:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1846:9:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "expression": {
                                "id": 934,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "1886:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "1886:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 933,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1879:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint64_$",
                              "typeString": "type(uint64)"
                            },
                            "typeName": {
                              "id": 932,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "1879:6:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1879:23:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 940,
                                  "name": "anchors",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 735,
                                  "src": "1940:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage",
                                    "typeString": "bytes storage ref"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_storage",
                                    "typeString": "bytes storage ref"
                                  }
                                ],
                                "id": 939,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "1930:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 941,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1930:18:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1922:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes20_$",
                              "typeString": "type(bytes20)"
                            },
                            "typeName": {
                              "id": 937,
                              "name": "bytes20",
                              "nodeType": "ElementaryTypeName",
                              "src": "1922:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1922:27:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        ],
                        "id": 927,
                        "name": "RRSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 886,
                        "src": "1815:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_RRSet_$886_storage_ptr_$",
                          "typeString": "type(struct DNSSECImpl.RRSet storage pointer)"
                        }
                      },
                      "id": 943,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "inception",
                        "inserted",
                        "hash"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "1815:145:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_memory_ptr",
                        "typeString": "struct DNSSECImpl.RRSet memory"
                      }
                    },
                    "src": "1774:186:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSet_$886_storage",
                      "typeString": "struct DNSSECImpl.RRSet storage ref"
                    }
                  },
                  "id": 945,
                  "nodeType": "ExpressionStatement",
                  "src": "1774:186:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "hexValue": "00",
                        "id": 947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "hexString",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1988:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
                          "typeString": "literal_string hex\"00\""
                        },
                        "value": "\u0000"
                      },
                      {
                        "id": 948,
                        "name": "anchors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 735,
                        "src": "1997:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
                          "typeString": "literal_string hex\"00\""
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      ],
                      "id": 946,
                      "name": "RRSetUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 764,
                      "src": "1975:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,bytes memory)"
                      }
                    },
                    "id": 949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1975:30:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 950,
                  "nodeType": "EmitStatement",
                  "src": "1970:35:2"
                }
              ]
            },
            "documentation": {
              "id": 911,
              "nodeType": "StructuredDocumentation",
              "src": "1457:113:2",
              "text": " @dev Constructor.\n @param _anchors The binary format RR entries for the root DS records."
            },
            "id": 952,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 913,
                  "mutability": "mutable",
                  "name": "_anchors",
                  "nodeType": "VariableDeclaration",
                  "scope": 952,
                  "src": "1587:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 912,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1587:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1586:23:2"
            },
            "returnParameters": {
              "id": 915,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1617:0:2"
            },
            "scope": 2629,
            "src": "1575:437:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 976,
              "nodeType": "Block",
              "src": "2310:88:2",
              "statements": [
                {
                  "expression": {
                    "id": 966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 962,
                        "name": "algorithms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 896,
                        "src": "2320:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Algorithm_$3863_$",
                          "typeString": "mapping(uint8 => contract Algorithm)"
                        }
                      },
                      "id": 964,
                      "indexExpression": {
                        "id": 963,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 955,
                        "src": "2331:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2320:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Algorithm_$3863",
                        "typeString": "contract Algorithm"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 965,
                      "name": "algo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 957,
                      "src": "2337:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Algorithm_$3863",
                        "typeString": "contract Algorithm"
                      }
                    },
                    "src": "2320:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Algorithm_$3863",
                      "typeString": "contract Algorithm"
                    }
                  },
                  "id": 967,
                  "nodeType": "ExpressionStatement",
                  "src": "2320:21:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 969,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 955,
                        "src": "2373:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 972,
                            "name": "algo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 957,
                            "src": "2385:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Algorithm_$3863",
                              "typeString": "contract Algorithm"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Algorithm_$3863",
                              "typeString": "contract Algorithm"
                            }
                          ],
                          "id": 971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2377:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 970,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2377:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2377:13:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 968,
                      "name": "AlgorithmUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 746,
                      "src": "2356:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$returns$__$",
                        "typeString": "function (uint8,address)"
                      }
                    },
                    "id": 974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2356:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 975,
                  "nodeType": "EmitStatement",
                  "src": "2351:40:2"
                }
              ]
            },
            "documentation": {
              "id": 953,
              "nodeType": "StructuredDocumentation",
              "src": "2018:221:2",
              "text": " @dev Sets the contract address for a signature verification algorithm.\n      Callable only by the owner.\n @param id The algorithm ID\n @param algo The address of the algorithm contract."
            },
            "functionSelector": "020ed8d3",
            "id": 977,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 960,
                "modifierName": {
                  "id": 959,
                  "name": "owner_only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2702,
                  "src": "2299:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2299:10:2"
              }
            ],
            "name": "setAlgorithm",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 955,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "2266:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2266:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 957,
                  "mutability": "mutable",
                  "name": "algo",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "2276:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Algorithm_$3863",
                    "typeString": "contract Algorithm"
                  },
                  "typeName": {
                    "id": 956,
                    "name": "Algorithm",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3863,
                    "src": "2276:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Algorithm_$3863",
                      "typeString": "contract Algorithm"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2265:26:2"
            },
            "returnParameters": {
              "id": 961,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2310:0:2"
            },
            "scope": 2629,
            "src": "2244:154:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1001,
              "nodeType": "Block",
              "src": "2685:86:2",
              "statements": [
                {
                  "expression": {
                    "id": 991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 987,
                        "name": "digests",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 900,
                        "src": "2695:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
                          "typeString": "mapping(uint8 => contract Digest)"
                        }
                      },
                      "id": 989,
                      "indexExpression": {
                        "id": 988,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 980,
                        "src": "2703:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2695:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Digest_$5741",
                        "typeString": "contract Digest"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 990,
                      "name": "digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 982,
                      "src": "2709:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Digest_$5741",
                        "typeString": "contract Digest"
                      }
                    },
                    "src": "2695:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Digest_$5741",
                      "typeString": "contract Digest"
                    }
                  },
                  "id": 992,
                  "nodeType": "ExpressionStatement",
                  "src": "2695:20:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 994,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 980,
                        "src": "2744:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 997,
                            "name": "digest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 982,
                            "src": "2756:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Digest_$5741",
                              "typeString": "contract Digest"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Digest_$5741",
                              "typeString": "contract Digest"
                            }
                          ],
                          "id": 996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2748:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 995,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2748:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2748:15:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 993,
                      "name": "DigestUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 752,
                      "src": "2730:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$returns$__$",
                        "typeString": "function (uint8,address)"
                      }
                    },
                    "id": 999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2730:34:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1000,
                  "nodeType": "EmitStatement",
                  "src": "2725:39:2"
                }
              ]
            },
            "documentation": {
              "id": 978,
              "nodeType": "StructuredDocumentation",
              "src": "2404:214:2",
              "text": " @dev Sets the contract address for a digest verification algorithm.\n      Callable only by the owner.\n @param id The digest ID\n @param digest The address of the digest contract."
            },
            "functionSelector": "28e7677d",
            "id": 1002,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 985,
                "modifierName": {
                  "id": 984,
                  "name": "owner_only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2702,
                  "src": "2674:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2674:10:2"
              }
            ],
            "name": "setDigest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 980,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 1002,
                  "src": "2642:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 979,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2642:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 982,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1002,
                  "src": "2652:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Digest_$5741",
                    "typeString": "contract Digest"
                  },
                  "typeName": {
                    "id": 981,
                    "name": "Digest",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5741,
                    "src": "2652:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Digest_$5741",
                      "typeString": "contract Digest"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2641:25:2"
            },
            "returnParameters": {
              "id": 986,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2685:0:2"
            },
            "scope": 2629,
            "src": "2623:148:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1026,
              "nodeType": "Block",
              "src": "3062:96:2",
              "statements": [
                {
                  "expression": {
                    "id": 1016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1012,
                        "name": "nsec3Digests",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "3072:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_NSEC3Digest_$5847_$",
                          "typeString": "mapping(uint8 => contract NSEC3Digest)"
                        }
                      },
                      "id": 1014,
                      "indexExpression": {
                        "id": 1013,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1005,
                        "src": "3085:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3072:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                        "typeString": "contract NSEC3Digest"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1015,
                      "name": "digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1007,
                      "src": "3091:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                        "typeString": "contract NSEC3Digest"
                      }
                    },
                    "src": "3072:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                      "typeString": "contract NSEC3Digest"
                    }
                  },
                  "id": 1017,
                  "nodeType": "ExpressionStatement",
                  "src": "3072:25:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1019,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1005,
                        "src": "3131:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 1022,
                            "name": "digest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1007,
                            "src": "3143:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                              "typeString": "contract NSEC3Digest"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                              "typeString": "contract NSEC3Digest"
                            }
                          ],
                          "id": 1021,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3135:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1020,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3135:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1023,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3135:15:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1018,
                      "name": "NSEC3DigestUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 758,
                      "src": "3112:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$returns$__$",
                        "typeString": "function (uint8,address)"
                      }
                    },
                    "id": 1024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3112:39:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1025,
                  "nodeType": "EmitStatement",
                  "src": "3107:44:2"
                }
              ]
            },
            "documentation": {
              "id": 1003,
              "nodeType": "StructuredDocumentation",
              "src": "2777:208:2",
              "text": " @dev Sets the contract address for an NSEC3 digest algorithm.\n      Callable only by the owner.\n @param id The digest ID\n @param digest The address of the digest contract."
            },
            "functionSelector": "8438dc04",
            "id": 1027,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1010,
                "modifierName": {
                  "id": 1009,
                  "name": "owner_only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2702,
                  "src": "3051:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3051:10:2"
              }
            ],
            "name": "setNSEC3Digest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1005,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "3014:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1004,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3014:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1007,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "3024:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                    "typeString": "contract NSEC3Digest"
                  },
                  "typeName": {
                    "id": 1006,
                    "name": "NSEC3Digest",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5847,
                    "src": "3024:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                      "typeString": "contract NSEC3Digest"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3013:30:2"
            },
            "returnParameters": {
              "id": 1011,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3062:0:2"
            },
            "scope": 2629,
            "src": "2990:168:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              773
            ],
            "body": {
              "id": 1110,
              "nodeType": "Block",
              "src": "3596:478:2",
              "statements": [
                {
                  "assignments": [
                    1039
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1039,
                      "mutability": "mutable",
                      "name": "offset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1110,
                      "src": "3606:11:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1038,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3606:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1041,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 1040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3620:1:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3606:15:2"
                },
                {
                  "assignments": [
                    1043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1043,
                      "mutability": "mutable",
                      "name": "proof",
                      "nodeType": "VariableDeclaration",
                      "scope": 1110,
                      "src": "3631:18:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1042,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3631:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1045,
                  "initialValue": {
                    "id": 1044,
                    "name": "_proof",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1032,
                    "src": "3652:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3631:27:2"
                },
                {
                  "body": {
                    "id": 1106,
                    "nodeType": "Block",
                    "src": "3696:350:2",
                    "statements": [
                      {
                        "assignments": [
                          1051
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1051,
                            "mutability": "mutable",
                            "name": "input",
                            "nodeType": "VariableDeclaration",
                            "scope": 1106,
                            "src": "3710:31:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                              "typeString": "struct DNSSEC.RRSetWithSignature"
                            },
                            "typeName": {
                              "id": 1050,
                              "name": "RRSetWithSignature",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 740,
                              "src": "3710:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1052,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3710:31:2"
                      },
                      {
                        "expression": {
                          "id": 1066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1053,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1051,
                              "src": "3755:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            },
                            "id": 1055,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "rrset",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 737,
                            "src": "3755:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1060,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1058,
                                  "name": "offset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1039,
                                  "src": "3784:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 1059,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3793:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "3784:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 1063,
                                    "name": "offset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1039,
                                    "src": "3812:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1061,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1030,
                                    "src": "3796:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1062,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "readUint16",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 331,
                                  "src": "3796:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint16_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256) pure returns (uint16)"
                                  }
                                },
                                "id": 1064,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3796:23:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 1056,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1030,
                                "src": "3769:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "3769:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 1065,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3769:51:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "3755:65:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1067,
                        "nodeType": "ExpressionStatement",
                        "src": "3755:65:2"
                      },
                      {
                        "expression": {
                          "id": 1074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1068,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1039,
                            "src": "3834:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1073,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "expression": {
                                  "id": 1069,
                                  "name": "input",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1051,
                                  "src": "3844:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                    "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                  }
                                },
                                "id": 1070,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rrset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 737,
                                "src": "3844:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "3844:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 1072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3865:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "3844:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3834:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1075,
                        "nodeType": "ExpressionStatement",
                        "src": "3834:32:2"
                      },
                      {
                        "expression": {
                          "id": 1089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1076,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1051,
                              "src": "3880:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            },
                            "id": 1078,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "sig",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 739,
                            "src": "3880:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1083,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1081,
                                  "name": "offset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1039,
                                  "src": "3907:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 1082,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3916:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "3907:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 1086,
                                    "name": "offset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1039,
                                    "src": "3935:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1084,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1030,
                                    "src": "3919:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1085,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "readUint16",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 331,
                                  "src": "3919:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint16_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256) pure returns (uint16)"
                                  }
                                },
                                "id": 1087,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3919:23:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 1079,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1030,
                                "src": "3892:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "3892:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 1088,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3892:51:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "3880:63:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1090,
                        "nodeType": "ExpressionStatement",
                        "src": "3880:63:2"
                      },
                      {
                        "expression": {
                          "id": 1097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1091,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1039,
                            "src": "3957:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "expression": {
                                  "id": 1092,
                                  "name": "input",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1051,
                                  "src": "3967:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                    "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                  }
                                },
                                "id": 1093,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sig",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 739,
                                "src": "3967:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1094,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "3967:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 1095,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3986:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "3967:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3957:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1098,
                        "nodeType": "ExpressionStatement",
                        "src": "3957:30:2"
                      },
                      {
                        "expression": {
                          "id": 1104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1099,
                            "name": "proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1043,
                            "src": "4001:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 1101,
                                "name": "input",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1051,
                                "src": "4022:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                  "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                }
                              },
                              {
                                "id": 1102,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1043,
                                "src": "4029:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                  "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1100,
                              "name": "_submitRRSet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1933,
                              "src": "4009:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) returns (bytes memory)"
                              }
                            },
                            "id": 1103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4009:26:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "4001:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1105,
                        "nodeType": "ExpressionStatement",
                        "src": "4001:34:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1046,
                      "name": "offset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1039,
                      "src": "3674:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1047,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1030,
                        "src": "3683:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1048,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "3683:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3674:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1107,
                  "nodeType": "WhileStatement",
                  "src": "3668:378:2"
                },
                {
                  "expression": {
                    "id": 1108,
                    "name": "proof",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1043,
                    "src": "4062:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1037,
                  "id": 1109,
                  "nodeType": "Return",
                  "src": "4055:12:2"
                }
              ]
            },
            "documentation": {
              "id": 1028,
              "nodeType": "StructuredDocumentation",
              "src": "3164:326:2",
              "text": " @dev Submits multiple RRSets\n @param data The data to submit, as a series of chunks. Each chunk is\n        in the format <uint16 length><bytes input><uint16 length><bytes sig>\n @param _proof The DNSKEY or DS to validate the first signature against.\n @return The last RRSET submitted."
            },
            "functionSelector": "76a14d1d",
            "id": 1111,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "submitRRSets",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1034,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3564:8:2"
            },
            "parameters": {
              "id": 1033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1030,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1111,
                  "src": "3517:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1029,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3517:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1032,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1111,
                  "src": "3536:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1031,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3536:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3516:40:2"
            },
            "returnParameters": {
              "id": 1037,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1036,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1111,
                  "src": "3582:12:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1035,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3582:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3581:14:2"
            },
            "scope": 2629,
            "src": "3495:579:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              782
            ],
            "body": {
              "id": 1127,
              "nodeType": "Block",
              "src": "4927:50:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1123,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1114,
                        "src": "4957:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        }
                      },
                      {
                        "id": 1124,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1116,
                        "src": "4964:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1122,
                      "name": "_submitRRSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1933,
                      "src": "4944:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) returns (bytes memory)"
                      }
                    },
                    "id": 1125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4944:26:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1121,
                  "id": 1126,
                  "nodeType": "Return",
                  "src": "4937:33:2"
                }
              ]
            },
            "documentation": {
              "id": 1112,
              "nodeType": "StructuredDocumentation",
              "src": "4080:709:2",
              "text": " @dev Submits a signed set of RRs to the oracle.\n RRSETs are only accepted if they are signed with a key that is already\n trusted, or if they are self-signed, and the signing key is identified by\n a DS record that is already trusted.\n @param input The signed RR set. This is in the format described in section\n        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n        data, followed by a series of canonicalised RR records that the signature\n        applies to.\n @param proof The DNSKEY or DS to validate the signature against. Must Already\n        have been submitted and proved previously."
            },
            "functionSelector": "d7b82ebe",
            "id": 1128,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "submitRRSet",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1118,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4883:8:2"
            },
            "parameters": {
              "id": 1117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1114,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 1128,
                  "src": "4815:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1113,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "4815:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1116,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1128,
                  "src": "4848:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1115,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4848:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4814:53:2"
            },
            "returnParameters": {
              "id": 1121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1120,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1128,
                  "src": "4909:12:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1119,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4909:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4908:14:2"
            },
            "scope": 2629,
            "src": "4794:183:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              793
            ],
            "body": {
              "id": 1218,
              "nodeType": "Block",
              "src": "5587:1383:2",
              "statements": [
                {
                  "assignments": [
                    1144
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1144,
                      "mutability": "mutable",
                      "name": "rrset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1218,
                      "src": "5597:30:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet"
                      },
                      "typeName": {
                        "id": 1143,
                        "name": "RRUtils.SignedSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2900,
                        "src": "5597:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                          "typeString": "struct RRUtils.SignedSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1145,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5597:30:2"
                },
                {
                  "expression": {
                    "id": 1151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1146,
                      "name": "rrset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1144,
                      "src": "5637:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1148,
                          "name": "nsec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1135,
                          "src": "5663:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        {
                          "id": 1149,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1137,
                          "src": "5669:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1147,
                        "name": "validateSignedSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2018,
                        "src": "5645:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) view returns (struct RRUtils.SignedSet memory)"
                        }
                      },
                      "id": 1150,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5645:30:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "src": "5637:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "id": 1152,
                  "nodeType": "ExpressionStatement",
                  "src": "5637:38:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 1157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 1154,
                            "name": "rrset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1144,
                            "src": "5693:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1155,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "typeCovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "5693:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1156,
                          "name": "DNSTYPE_NSEC",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 864,
                          "src": "5714:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "5693:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1153,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5685:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5685:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1159,
                  "nodeType": "ExpressionStatement",
                  "src": "5685:42:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "id": 1176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "id": 1173,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1163,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1144,
                                  "src": "5819:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 1164,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "inception",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2891,
                                "src": "5819:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 1165,
                                      "name": "rrsets",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 892,
                                      "src": "5837:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                        "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                                      }
                                    },
                                    "id": 1169,
                                    "indexExpression": {
                                      "arguments": [
                                        {
                                          "id": 1167,
                                          "name": "deleteName",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1133,
                                          "src": "5854:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "id": 1166,
                                        "name": "keccak256",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -8,
                                        "src": "5844:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                          "typeString": "function (bytes memory) pure returns (bytes32)"
                                        }
                                      },
                                      "id": 1168,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5844:21:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5837:29:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                                      "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                                    }
                                  },
                                  "id": 1171,
                                  "indexExpression": {
                                    "id": 1170,
                                    "name": "deleteType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1131,
                                    "src": "5867:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5837:41:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRSet_$886_storage",
                                    "typeString": "struct DNSSECImpl.RRSet storage ref"
                                  }
                                },
                                "id": 1172,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "inception",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 881,
                                "src": "5837:51:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "src": "5819:69:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 1162,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5813:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int32_$",
                              "typeString": "type(int32)"
                            },
                            "typeName": {
                              "id": 1161,
                              "name": "int32",
                              "nodeType": "ElementaryTypeName",
                              "src": "5813:5:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5813:76:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5893:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5813:81:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1160,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5805:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5805:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1178,
                  "nodeType": "ExpressionStatement",
                  "src": "5805:90:2"
                },
                {
                  "body": {
                    "id": 1213,
                    "nodeType": "Block",
                    "src": "5984:918:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1196,
                              "name": "iter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1182,
                              "src": "6768:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 1197,
                                "name": "rrset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1144,
                                "src": "6774:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                  "typeString": "struct RRUtils.SignedSet memory"
                                }
                              },
                              "id": 1198,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "name",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2899,
                              "src": "6774:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1199,
                              "name": "deleteName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1133,
                              "src": "6786:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1200,
                              "name": "deleteType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1131,
                              "src": "6798:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "id": 1195,
                            "name": "checkNsecName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1315,
                            "src": "6754:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint16_$returns$__$",
                              "typeString": "function (struct RRUtils.RRIterator memory,bytes memory,bytes memory,uint16) pure"
                            }
                          },
                          "id": 1201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6754:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1202,
                        "nodeType": "ExpressionStatement",
                        "src": "6754:55:2"
                      },
                      {
                        "expression": {
                          "id": 1210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "6823:48:2",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1203,
                                "name": "rrsets",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 892,
                                "src": "6830:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                  "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                                }
                              },
                              "id": 1207,
                              "indexExpression": {
                                "arguments": [
                                  {
                                    "id": 1205,
                                    "name": "deleteName",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1133,
                                    "src": "6847:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 1204,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "6837:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 1206,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6837:21:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6830:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                                "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                              }
                            },
                            "id": 1209,
                            "indexExpression": {
                              "id": 1208,
                              "name": "deleteType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1131,
                              "src": "6860:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6830:41:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRSet_$886_storage",
                              "typeString": "struct DNSSECImpl.RRSet storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1211,
                        "nodeType": "ExpressionStatement",
                        "src": "6823:48:2"
                      },
                      {
                        "functionReturnParameters": 1140,
                        "id": 1212,
                        "nodeType": "Return",
                        "src": "6885:7:2"
                      }
                    ]
                  },
                  "condition": {
                    "id": 1190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5957:12:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 1187,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1182,
                          "src": "5958:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1188,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "5958:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 1189,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5958:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1214,
                  "initializationExpression": {
                    "assignments": [
                      1182
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1182,
                        "mutability": "mutable",
                        "name": "iter",
                        "nodeType": "VariableDeclaration",
                        "scope": 1214,
                        "src": "5911:30:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        },
                        "typeName": {
                          "id": 1181,
                          "name": "RRUtils.RRIterator",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3030,
                          "src": "5911:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                            "typeString": "struct RRUtils.RRIterator"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1186,
                    "initialValue": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 1183,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1144,
                          "src": "5944:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1184,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3015,
                        "src": "5944:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.RRIterator memory)"
                        }
                      },
                      "id": 1185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5944:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator memory"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5911:44:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 1191,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1182,
                          "src": "5971:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1192,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "5971:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 1193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5971:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 1194,
                    "nodeType": "ExpressionStatement",
                    "src": "5971:11:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "5906:996:2"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1215,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "6955:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6955:8:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1217,
                  "nodeType": "ExpressionStatement",
                  "src": "6955:8:2"
                }
              ]
            },
            "documentation": {
              "id": 1129,
              "nodeType": "StructuredDocumentation",
              "src": "4983:454:2",
              "text": " @dev Deletes an RR from the oracle.\n @param deleteType The DNS record type to delete.\n @param deleteName which you want to delete\n @param nsec The signed NSEC RRset. This is in the format described in section\n        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n        data, followed by a series of canonicalised RR records that the signature\n        applies to."
            },
            "functionSelector": "2c095cbb",
            "id": 1219,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deleteRRSet",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1139,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5574:8:2"
            },
            "parameters": {
              "id": 1138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1131,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1219,
                  "src": "5463:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1130,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5463:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1133,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1219,
                  "src": "5482:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1132,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5482:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1135,
                  "mutability": "mutable",
                  "name": "nsec",
                  "nodeType": "VariableDeclaration",
                  "scope": 1219,
                  "src": "5507:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1134,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "5507:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1137,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1219,
                  "src": "5539:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1136,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5539:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5462:96:2"
            },
            "returnParameters": {
              "id": 1140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5587:0:2"
            },
            "scope": 2629,
            "src": "5442:1528:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1314,
              "nodeType": "Block",
              "src": "7111:1040:2",
              "statements": [
                {
                  "assignments": [
                    1231
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1231,
                      "mutability": "mutable",
                      "name": "rdataOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1314,
                      "src": "7121:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1230,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7121:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1234,
                  "initialValue": {
                    "expression": {
                      "id": 1232,
                      "name": "iter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1221,
                      "src": "7140:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator memory"
                      }
                    },
                    "id": 1233,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "rdataOffset",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3027,
                    "src": "7140:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7121:35:2"
                },
                {
                  "assignments": [
                    1236
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1236,
                      "mutability": "mutable",
                      "name": "nextNameLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 1314,
                      "src": "7166:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1235,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7166:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1242,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1240,
                        "name": "rdataOffset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1231,
                        "src": "7209:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "expression": {
                          "id": 1237,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1221,
                          "src": "7188:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1238,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3017,
                        "src": "7188:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nameLength",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2781,
                      "src": "7188:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7188:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7166:55:2"
                },
                {
                  "assignments": [
                    1244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1244,
                      "mutability": "mutable",
                      "name": "rDataLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 1314,
                      "src": "7231:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1243,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7231:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1250,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1245,
                        "name": "iter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1221,
                        "src": "7250:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator memory"
                        }
                      },
                      "id": 1246,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nextOffset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3029,
                      "src": "7250:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 1247,
                        "name": "iter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1221,
                        "src": "7268:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator memory"
                        }
                      },
                      "id": 1248,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rdataOffset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3027,
                      "src": "7268:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7250:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7231:53:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1252,
                          "name": "rDataLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1244,
                          "src": "7385:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "id": 1253,
                          "name": "nextNameLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1236,
                          "src": "7399:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7385:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1251,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7377:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7377:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1256,
                  "nodeType": "ExpressionStatement",
                  "src": "7377:37:2"
                },
                {
                  "assignments": [
                    1258
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1258,
                      "mutability": "mutable",
                      "name": "compareResult",
                      "nodeType": "VariableDeclaration",
                      "scope": 1314,
                      "src": "7425:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 1257,
                        "name": "int",
                        "nodeType": "ElementaryTypeName",
                        "src": "7425:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1263,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1261,
                        "name": "nsecName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1223,
                        "src": "7469:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1259,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1225,
                        "src": "7445:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "compareNames",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3827,
                      "src": "7445:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_int256_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,bytes memory) pure returns (int256)"
                      }
                    },
                    "id": 1262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7445:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7425:53:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1264,
                      "name": "compareResult",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1258,
                      "src": "7491:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1265,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7508:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7491:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1312,
                    "nodeType": "Block",
                    "src": "7689:456:2",
                    "statements": [
                      {
                        "assignments": [
                          1281
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1281,
                            "mutability": "mutable",
                            "name": "nextName",
                            "nodeType": "VariableDeclaration",
                            "scope": 1312,
                            "src": "7779:21:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1280,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "7779:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1288,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1285,
                              "name": "rdataOffset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1231,
                              "src": "7823:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1286,
                              "name": "nextNameLength",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1236,
                              "src": "7835:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 1282,
                                "name": "iter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1221,
                                "src": "7803:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                  "typeString": "struct RRUtils.RRIterator memory"
                                }
                              },
                              "id": 1283,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3017,
                              "src": "7803:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1284,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "substring",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 502,
                            "src": "7803:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                            }
                          },
                          "id": 1287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7803:47:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7779:71:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 1292,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1290,
                                "name": "compareResult",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1258,
                                "src": "7923:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1291,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7939:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7923:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1289,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7915:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7915:26:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1294,
                        "nodeType": "ExpressionStatement",
                        "src": "7915:26:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 1297,
                                "name": "nextName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "7980:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 1295,
                                "name": "nsecName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1223,
                                "src": "7958:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "compareNames",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3827,
                              "src": "7958:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_int256_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (int256)"
                              }
                            },
                            "id": 1298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7958:31:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1299,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7992:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7958:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1311,
                        "nodeType": "IfStatement",
                        "src": "7955:180:2",
                        "trueBody": {
                          "id": 1310,
                          "nodeType": "Block",
                          "src": "7995:140:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 1307,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 1304,
                                          "name": "nextName",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1281,
                                          "src": "8106:8:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1302,
                                          "name": "deleteName",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1225,
                                          "src": "8082:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 1303,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "compareNames",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3827,
                                        "src": "8082:23:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_int256_$bound_to$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes memory,bytes memory) pure returns (int256)"
                                        }
                                      },
                                      "id": 1305,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8082:33:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 1306,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8118:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "8082:37:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 1301,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "8074:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 1308,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8074:46:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1309,
                              "nodeType": "ExpressionStatement",
                              "src": "8074:46:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 1313,
                  "nodeType": "IfStatement",
                  "src": "7488:657:2",
                  "trueBody": {
                    "id": 1279,
                    "nodeType": "Block",
                    "src": "7511:172:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "7603:68:2",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1273,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1271,
                                      "name": "rdataOffset",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1231,
                                      "src": "7630:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 1272,
                                      "name": "nextNameLength",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1236,
                                      "src": "7644:14:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "7630:28:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 1274,
                                    "name": "deleteType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1227,
                                    "src": "7660:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "expression": {
                                    "expression": {
                                      "id": 1268,
                                      "name": "iter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1221,
                                      "src": "7604:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                        "typeString": "struct RRUtils.RRIterator memory"
                                      }
                                    },
                                    "id": 1269,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "data",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3017,
                                    "src": "7604:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1270,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "checkTypeBitmap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3672,
                                  "src": "7604:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint16_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256,uint16) pure returns (bool)"
                                  }
                                },
                                "id": 1275,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7604:67:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1267,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7595:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7595:77:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1278,
                        "nodeType": "ExpressionStatement",
                        "src": "7595:77:2"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 1315,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkNsecName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1221,
                  "mutability": "mutable",
                  "name": "iter",
                  "nodeType": "VariableDeclaration",
                  "scope": 1315,
                  "src": "6999:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                    "typeString": "struct RRUtils.RRIterator"
                  },
                  "typeName": {
                    "id": 1220,
                    "name": "RRUtils.RRIterator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3030,
                    "src": "6999:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                      "typeString": "struct RRUtils.RRIterator"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1223,
                  "mutability": "mutable",
                  "name": "nsecName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1315,
                  "src": "7031:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1222,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7031:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1225,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1315,
                  "src": "7054:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1224,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7054:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1227,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1315,
                  "src": "7079:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1226,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "7079:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6998:99:2"
            },
            "returnParameters": {
              "id": 1229,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7111:0:2"
            },
            "scope": 2629,
            "src": "6976:1175:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              806
            ],
            "body": {
              "id": 1466,
              "nodeType": "Block",
              "src": "9915:1457:2",
              "statements": [
                {
                  "assignments": [
                    1331
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1331,
                      "mutability": "mutable",
                      "name": "originalInception",
                      "nodeType": "VariableDeclaration",
                      "scope": 1466,
                      "src": "9925:23:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int32",
                        "typeString": "int32"
                      },
                      "typeName": {
                        "id": 1330,
                        "name": "int32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9925:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1343,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 1334,
                              "name": "rrsets",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 892,
                              "src": "9957:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                              }
                            },
                            "id": 1338,
                            "indexExpression": {
                              "arguments": [
                                {
                                  "id": 1336,
                                  "name": "deleteName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1320,
                                  "src": "9974:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 1335,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "9964:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 1337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9964:21:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9957:29:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                              "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                            }
                          },
                          "id": 1340,
                          "indexExpression": {
                            "id": 1339,
                            "name": "deleteType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1318,
                            "src": "9987:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9957:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSet_$886_storage",
                            "typeString": "struct DNSSECImpl.RRSet storage ref"
                          }
                        },
                        "id": 1341,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "inception",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 881,
                        "src": "9957:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 1333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "9951:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_int32_$",
                        "typeString": "type(int32)"
                      },
                      "typeName": {
                        "id": 1332,
                        "name": "int32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9951:5:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9951:58:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int32",
                      "typeString": "int32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9925:84:2"
                },
                {
                  "assignments": [
                    1347
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1347,
                      "mutability": "mutable",
                      "name": "ce",
                      "nodeType": "VariableDeclaration",
                      "scope": 1466,
                      "src": "10020:27:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet"
                      },
                      "typeName": {
                        "id": 1346,
                        "name": "RRUtils.SignedSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2900,
                        "src": "10020:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                          "typeString": "struct RRUtils.SignedSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1352,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1349,
                        "name": "closestEncloser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1322,
                        "src": "10068:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        }
                      },
                      {
                        "id": 1350,
                        "name": "dnskey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1326,
                        "src": "10085:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1348,
                      "name": "validateSignedSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2018,
                      "src": "10050:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$",
                        "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) view returns (struct RRUtils.SignedSet memory)"
                      }
                    },
                    "id": 1351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10050:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10020:72:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1354,
                        "name": "ce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1347,
                        "src": "10121:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      {
                        "id": 1355,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1320,
                        "src": "10125:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1356,
                        "name": "originalInception",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1331,
                        "src": "10137:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        }
                      ],
                      "id": 1353,
                      "name": "checkNSEC3Validity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1504,
                      "src": "10102:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$_t_bytes_memory_ptr_$_t_int32_$returns$__$",
                        "typeString": "function (struct RRUtils.SignedSet memory,bytes memory,int32) pure"
                      }
                    },
                    "id": 1357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10102:53:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1358,
                  "nodeType": "ExpressionStatement",
                  "src": "10102:53:2"
                },
                {
                  "assignments": [
                    1362
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1362,
                      "mutability": "mutable",
                      "name": "nc",
                      "nodeType": "VariableDeclaration",
                      "scope": 1466,
                      "src": "10166:27:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet"
                      },
                      "typeName": {
                        "id": 1361,
                        "name": "RRUtils.SignedSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2900,
                        "src": "10166:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                          "typeString": "struct RRUtils.SignedSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1363,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10166:27:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 1364,
                          "name": "nextClosest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1324,
                          "src": "10206:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        "id": 1365,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 737,
                        "src": "10206:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10206:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1367,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10233:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10206:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1383,
                  "nodeType": "IfStatement",
                  "src": "10203:168:2",
                  "trueBody": {
                    "id": 1382,
                    "nodeType": "Block",
                    "src": "10236:135:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1369,
                            "name": "nc",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1362,
                            "src": "10250:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 1371,
                                "name": "nextClosest",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1324,
                                "src": "10273:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                  "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                }
                              },
                              {
                                "id": 1372,
                                "name": "dnskey",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1326,
                                "src": "10286:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                  "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1370,
                              "name": "validateSignedSet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2018,
                              "src": "10255:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$",
                                "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) view returns (struct RRUtils.SignedSet memory)"
                              }
                            },
                            "id": 1373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10255:38:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "src": "10250:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1375,
                        "nodeType": "ExpressionStatement",
                        "src": "10250:43:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1377,
                              "name": "nc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1362,
                              "src": "10326:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            {
                              "id": 1378,
                              "name": "deleteName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1320,
                              "src": "10330:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1379,
                              "name": "originalInception",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1331,
                              "src": "10342:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int32",
                                "typeString": "int32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_int32",
                                "typeString": "int32"
                              }
                            ],
                            "id": 1376,
                            "name": "checkNSEC3Validity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1504,
                            "src": "10307:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$_t_bytes_memory_ptr_$_t_int32_$returns$__$",
                              "typeString": "function (struct RRUtils.SignedSet memory,bytes memory,int32) pure"
                            }
                          },
                          "id": 1380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10307:53:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1381,
                        "nodeType": "ExpressionStatement",
                        "src": "10307:53:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1387
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1387,
                      "mutability": "mutable",
                      "name": "ceNSEC3",
                      "nodeType": "VariableDeclaration",
                      "scope": 1466,
                      "src": "10381:28:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                        "typeString": "struct RRUtils.NSEC3"
                      },
                      "typeName": {
                        "id": 1386,
                        "name": "RRUtils.NSEC3",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3392,
                        "src": "10381:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                          "typeString": "struct RRUtils.NSEC3"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1391,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1389,
                        "name": "ce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1347,
                        "src": "10422:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      ],
                      "id": 1388,
                      "name": "readNSEC3",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1688,
                      "src": "10412:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_NSEC3_$3392_memory_ptr_$",
                        "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.NSEC3 memory)"
                      }
                    },
                    "id": 1390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10412:13:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                      "typeString": "struct RRUtils.NSEC3 memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10381:44:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 1398,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 1396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1393,
                              "name": "ceNSEC3",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1387,
                              "src": "10508:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                "typeString": "struct RRUtils.NSEC3 memory"
                              }
                            },
                            "id": 1394,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "flags",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3383,
                            "src": "10508:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "hexValue": "30786665",
                            "id": 1395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10524:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_254_by_1",
                              "typeString": "int_const 254"
                            },
                            "value": "0xfe"
                          },
                          "src": "10508:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1397,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10532:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "10508:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1392,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10500:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10500:34:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1400,
                  "nodeType": "ExpressionStatement",
                  "src": "10500:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "10754:39:2",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 1404,
                                "name": "DNSTYPE_DNAME",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 855,
                                "src": "10779:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 1402,
                                "name": "ceNSEC3",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1387,
                                "src": "10755:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                  "typeString": "struct RRUtils.NSEC3 memory"
                                }
                              },
                              "id": 1403,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "checkTypeBitmap",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3547,
                              "src": "10755:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_NSEC3_$3392_memory_ptr_$_t_uint16_$returns$_t_bool_$bound_to$_t_struct$_NSEC3_$3392_memory_ptr_$",
                                "typeString": "function (struct RRUtils.NSEC3 memory,uint16) pure returns (bool)"
                              }
                            },
                            "id": 1405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10755:38:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1416,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "!",
                                "prefix": true,
                                "src": "10798:36:2",
                                "subExpression": {
                                  "arguments": [
                                    {
                                      "id": 1409,
                                      "name": "DNSTYPE_NS",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 849,
                                      "src": "10823:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    ],
                                    "expression": {
                                      "id": 1407,
                                      "name": "ceNSEC3",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1387,
                                      "src": "10799:7:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                        "typeString": "struct RRUtils.NSEC3 memory"
                                      }
                                    },
                                    "id": 1408,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "checkTypeBitmap",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3547,
                                    "src": "10799:23:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_NSEC3_$3392_memory_ptr_$_t_uint16_$returns$_t_bool_$bound_to$_t_struct$_NSEC3_$3392_memory_ptr_$",
                                      "typeString": "function (struct RRUtils.NSEC3 memory,uint16) pure returns (bool)"
                                    }
                                  },
                                  "id": 1410,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10799:35:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "id": 1414,
                                    "name": "DNSTYPE_SOA",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 852,
                                    "src": "10862:11:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1412,
                                    "name": "ceNSEC3",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1387,
                                    "src": "10838:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                      "typeString": "struct RRUtils.NSEC3 memory"
                                    }
                                  },
                                  "id": 1413,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "checkTypeBitmap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3547,
                                  "src": "10838:23:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_NSEC3_$3392_memory_ptr_$_t_uint16_$returns$_t_bool_$bound_to$_t_struct$_NSEC3_$3392_memory_ptr_$",
                                    "typeString": "function (struct RRUtils.NSEC3 memory,uint16) pure returns (bool)"
                                  }
                                },
                                "id": 1415,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10838:36:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "10798:76:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1417,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10797:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10754:121:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1401,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10746:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10746:130:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1420,
                  "nodeType": "ExpressionStatement",
                  "src": "10746:130:2"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 1422,
                        "name": "deleteType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1318,
                        "src": "10994:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "id": 1423,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1320,
                        "src": "11006:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 1424,
                          "name": "ce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1347,
                          "src": "11018:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1425,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "name",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2899,
                        "src": "11018:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1426,
                        "name": "ceNSEC3",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1387,
                        "src": "11027:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        }
                      ],
                      "id": 1421,
                      "name": "isMatchingNSEC3Record",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1533,
                      "src": "10972:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint16_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_NSEC3_$3392_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (uint16,bytes memory,bytes memory,struct RRUtils.NSEC3 memory) view returns (bool)"
                      }
                    },
                    "id": 1427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10972:63:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "arguments": [
                        {
                          "id": 1439,
                          "name": "deleteType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1318,
                          "src": "11187:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        {
                          "id": 1440,
                          "name": "deleteName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1320,
                          "src": "11199:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "expression": {
                            "id": 1441,
                            "name": "ce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1347,
                            "src": "11211:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1442,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "name",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2899,
                          "src": "11211:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 1443,
                          "name": "ceNSEC3",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1387,
                          "src": "11220:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        },
                        {
                          "expression": {
                            "id": 1444,
                            "name": "nc",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1362,
                            "src": "11229:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1445,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "name",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2899,
                          "src": "11229:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "id": 1447,
                              "name": "nc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1362,
                              "src": "11248:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            ],
                            "id": 1446,
                            "name": "readNSEC3",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1688,
                            "src": "11238:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_NSEC3_$3392_memory_ptr_$",
                              "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.NSEC3 memory)"
                            }
                          },
                          "id": 1448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11238:13:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        ],
                        "id": 1438,
                        "name": "isCoveringNSEC3Record",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1660,
                        "src": "11165:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint16_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_NSEC3_$3392_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (uint16,bytes memory,bytes memory,struct RRUtils.NSEC3 memory,bytes memory,struct RRUtils.NSEC3 memory) view returns (bool)"
                        }
                      },
                      "id": 1449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11165:87:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 1463,
                      "nodeType": "Block",
                      "src": "11333:33:2",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1460,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -19,
                                -19
                              ],
                              "referencedDeclaration": -19,
                              "src": "11347:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1461,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11347:8:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1462,
                          "nodeType": "ExpressionStatement",
                          "src": "11347:8:2"
                        }
                      ]
                    },
                    "id": 1464,
                    "nodeType": "IfStatement",
                    "src": "11162:204:2",
                    "trueBody": {
                      "id": 1459,
                      "nodeType": "Block",
                      "src": "11254:73:2",
                      "statements": [
                        {
                          "expression": {
                            "id": 1457,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "delete",
                            "prefix": true,
                            "src": "11268:48:2",
                            "subExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 1450,
                                  "name": "rrsets",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 892,
                                  "src": "11275:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                    "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                                  }
                                },
                                "id": 1454,
                                "indexExpression": {
                                  "arguments": [
                                    {
                                      "id": 1452,
                                      "name": "deleteName",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1320,
                                      "src": "11292:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 1451,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "11282:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 1453,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11282:21:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11275:29:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                                  "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                                }
                              },
                              "id": 1456,
                              "indexExpression": {
                                "id": 1455,
                                "name": "deleteType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1318,
                                "src": "11305:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "11275:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSet_$886_storage",
                                "typeString": "struct DNSSECImpl.RRSet storage ref"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1458,
                          "nodeType": "ExpressionStatement",
                          "src": "11268:48:2"
                        }
                      ]
                    }
                  },
                  "id": 1465,
                  "nodeType": "IfStatement",
                  "src": "10969:397:2",
                  "trueBody": {
                    "id": 1437,
                    "nodeType": "Block",
                    "src": "11037:119:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "11051:48:2",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1428,
                                "name": "rrsets",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 892,
                                "src": "11058:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                  "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                                }
                              },
                              "id": 1432,
                              "indexExpression": {
                                "arguments": [
                                  {
                                    "id": 1430,
                                    "name": "deleteName",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1320,
                                    "src": "11075:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 1429,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "11065:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 1431,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11065:21:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11058:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                                "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                              }
                            },
                            "id": 1434,
                            "indexExpression": {
                              "id": 1433,
                              "name": "deleteType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1318,
                              "src": "11088:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11058:41:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRSet_$886_storage",
                              "typeString": "struct DNSSECImpl.RRSet storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1436,
                        "nodeType": "ExpressionStatement",
                        "src": "11051:48:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1316,
              "nodeType": "StructuredDocumentation",
              "src": "8157:1552:2",
              "text": " @dev Deletes an RR from the oracle using an NSEC3 proof.\n      Deleting a record using NSEC3 requires using up to two NSEC3 records. There are two cases:\n       1. The name exists, but the record type doesn't. Eg, example.com has A records but no TXT records.\n       2. The name does not exist, but a parent name does.\n      In the first case, we submit one NSEC3 proof in `closestEncloser` that matches the target name\n      but does not have the bit for `deleteType` set in its type bitmap. In the second case, we submit\n      two proofs: closestEncloser and nextClosest, that together prove that the name does not exist.\n      NSEC3 records are in the format described in section 5.3.2 of RFC4035: The RRDATA section\n      from the RRSIG without the signature data, followed by a series of canonicalised RR records\n      that the signature applies to.\n @param deleteType The DNS record type to delete.\n @param deleteName The name to delete.\n @param closestEncloser An NSEC3 proof matching the closest enclosing name - that is,\n        the nearest ancestor of the target name that *does* exist.\n @param nextClosest An NSEC3 proof covering the next closest name. This proves that the immediate\n        subdomain of the closestEncloser does not exist.\n @param dnskey An encoded DNSKEY record that has already been submitted to the oracle and can be used\n        to verify the signatures closestEncloserSig and nextClosestSig"
            },
            "functionSelector": "0b1a2495",
            "id": 1467,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deleteRRSetNSEC3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1328,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9902:8:2"
            },
            "parameters": {
              "id": 1327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1318,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9740:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1317,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "9740:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1320,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9759:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1319,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9759:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1322,
                  "mutability": "mutable",
                  "name": "closestEncloser",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9784:41:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1321,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "9784:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1324,
                  "mutability": "mutable",
                  "name": "nextClosest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9827:37:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1323,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "9827:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1326,
                  "mutability": "mutable",
                  "name": "dnskey",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9866:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1325,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9866:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9739:147:2"
            },
            "returnParameters": {
              "id": 1329,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9915:0:2"
            },
            "scope": 2629,
            "src": "9714:1658:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1503,
              "nodeType": "Block",
              "src": "11500:604:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "id": 1485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          },
                          "id": 1483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 1479,
                                  "name": "nsec",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1469,
                                  "src": "11609:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 1480,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "inception",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2891,
                                "src": "11609:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 1478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "11603:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int32_$",
                                "typeString": "type(int32)"
                              },
                              "typeName": {
                                "id": 1477,
                                "name": "int32",
                                "nodeType": "ElementaryTypeName",
                                "src": "11603:5:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11603:21:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 1482,
                            "name": "originalInception",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1473,
                            "src": "11627:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "src": "11603:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11648:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11603:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1476,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11595:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11595:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1487,
                  "nodeType": "ExpressionStatement",
                  "src": "11595:55:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 1492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 1489,
                            "name": "nsec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1469,
                            "src": "11708:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1490,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "typeCovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "11708:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1491,
                          "name": "DNSTYPE_NSEC3",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 870,
                          "src": "11728:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "11708:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1488,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11700:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11700:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1494,
                  "nodeType": "ExpressionStatement",
                  "src": "11700:42:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 1497,
                              "name": "nsec",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1469,
                              "src": "12074:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 1498,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "name",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2899,
                            "src": "12074:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "id": 1499,
                            "name": "deleteName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1471,
                            "src": "12085:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 1496,
                          "name": "checkNSEC3OwnerName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1809,
                          "src": "12054:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes memory,bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 1500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12054:42:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1495,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12046:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12046:51:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1502,
                  "nodeType": "ExpressionStatement",
                  "src": "12046:51:2"
                }
              ]
            },
            "id": 1504,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkNSEC3Validity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1469,
                  "mutability": "mutable",
                  "name": "nsec",
                  "nodeType": "VariableDeclaration",
                  "scope": 1504,
                  "src": "11406:29:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 1468,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "11406:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1471,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1504,
                  "src": "11437:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1470,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11437:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1473,
                  "mutability": "mutable",
                  "name": "originalInception",
                  "nodeType": "VariableDeclaration",
                  "scope": 1504,
                  "src": "11462:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int32",
                    "typeString": "int32"
                  },
                  "typeName": {
                    "id": 1472,
                    "name": "int32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11462:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int32",
                      "typeString": "int32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11405:81:2"
            },
            "returnParameters": {
              "id": 1475,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11500:0:2"
            },
            "scope": 2629,
            "src": "11378:726:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1532,
              "nodeType": "Block",
              "src": "12284:283:2",
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 1518,
                        "name": "closestEncloser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1512,
                        "src": "12411:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        }
                      },
                      {
                        "id": 1519,
                        "name": "closestEncloserName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1510,
                        "src": "12428:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1520,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1508,
                        "src": "12449:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1517,
                      "name": "checkNSEC3Name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1717,
                      "src": "12396:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (struct RRUtils.NSEC3 memory,bytes memory,bytes memory) view returns (bool)"
                      }
                    },
                    "id": 1521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12396:64:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1529,
                  "nodeType": "IfStatement",
                  "src": "12393:145:2",
                  "trueBody": {
                    "id": 1528,
                    "nodeType": "Block",
                    "src": "12462:76:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "12483:44:2",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 1524,
                                "name": "deleteType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1506,
                                "src": "12516:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 1522,
                                "name": "closestEncloser",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1512,
                                "src": "12484:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                  "typeString": "struct RRUtils.NSEC3 memory"
                                }
                              },
                              "id": 1523,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "checkTypeBitmap",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3547,
                              "src": "12484:31:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_NSEC3_$3392_memory_ptr_$_t_uint16_$returns$_t_bool_$bound_to$_t_struct$_NSEC3_$3392_memory_ptr_$",
                                "typeString": "function (struct RRUtils.NSEC3 memory,uint16) pure returns (bool)"
                              }
                            },
                            "id": 1525,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12484:43:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1516,
                        "id": 1527,
                        "nodeType": "Return",
                        "src": "12476:51:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 1530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12555:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1516,
                  "id": 1531,
                  "nodeType": "Return",
                  "src": "12548:12:2"
                }
              ]
            },
            "id": 1533,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isMatchingNSEC3Record",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1506,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12141:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1505,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12141:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1508,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12160:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1507,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12160:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1510,
                  "mutability": "mutable",
                  "name": "closestEncloserName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12185:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1509,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12185:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1512,
                  "mutability": "mutable",
                  "name": "closestEncloser",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12219:36:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1511,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "12219:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12140:116:2"
            },
            "returnParameters": {
              "id": 1516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1515,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12278:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1514,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12278:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12277:6:2"
            },
            "scope": 2629,
            "src": "12110:457:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1659,
              "nodeType": "Block",
              "src": "12767:1220:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 1556,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 1554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1551,
                              "name": "nc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1545,
                              "src": "12850:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                "typeString": "struct RRUtils.NSEC3 memory"
                              }
                            },
                            "id": 1552,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "flags",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3383,
                            "src": "12850:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "hexValue": "30786665",
                            "id": 1553,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12861:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_254_by_1",
                              "typeString": "int_const 254"
                            },
                            "value": "0xfe"
                          },
                          "src": "12850:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12869:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12850:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1550,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12842:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12842:29:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1558,
                  "nodeType": "ExpressionStatement",
                  "src": "12842:29:2"
                },
                {
                  "assignments": [
                    1560
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1560,
                      "mutability": "mutable",
                      "name": "ceNameHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1659,
                      "src": "12882:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1559,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12882:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1564,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1562,
                        "name": "ceName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1539,
                        "src": "12923:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1561,
                      "name": "decodeOwnerNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1759,
                      "src": "12903:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12903:27:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12882:48:2"
                },
                {
                  "assignments": [
                    1566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1566,
                      "mutability": "mutable",
                      "name": "ncNameHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1659,
                      "src": "12940:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1565,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12940:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1570,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1568,
                        "name": "ncName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1543,
                        "src": "12981:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1567,
                      "name": "decodeOwnerNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1759,
                      "src": "12961:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12961:27:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12940:48:2"
                },
                {
                  "assignments": [
                    1572
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1572,
                      "mutability": "mutable",
                      "name": "lastOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1659,
                      "src": "12999:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1571,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "12999:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1574,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 1573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13017:1:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12999:19:2"
                },
                {
                  "body": {
                    "id": 1655,
                    "nodeType": "Block",
                    "src": "13241:645:2",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 1609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 1598,
                                "name": "ce",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1541,
                                "src": "13267:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                  "typeString": "struct RRUtils.NSEC3 memory"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 1601,
                                    "name": "offset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1576,
                                    "src": "13292:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1605,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 1602,
                                        "name": "deleteName",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1537,
                                        "src": "13300:10:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 1603,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "13300:17:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 1604,
                                      "name": "offset",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1576,
                                      "src": "13320:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "13300:26:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1599,
                                    "name": "deleteName",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1537,
                                    "src": "13271:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "substring",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 502,
                                  "src": "13271:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                  }
                                },
                                "id": 1606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13271:56:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                  "typeString": "struct RRUtils.NSEC3 memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1597,
                              "name": "hashName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1739,
                              "src": "13258:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (struct RRUtils.NSEC3 memory,bytes memory) view returns (bytes32)"
                              }
                            },
                            "id": 1607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13258:70:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 1608,
                            "name": "ceNameHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1560,
                            "src": "13332:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "13258:84:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1650,
                        "nodeType": "IfStatement",
                        "src": "13255:588:2",
                        "trueBody": {
                          "id": 1649,
                          "nodeType": "Block",
                          "src": "13344:499:2",
                          "statements": [
                            {
                              "assignments": [
                                1611
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1611,
                                  "mutability": "mutable",
                                  "name": "checkHash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1649,
                                  "src": "13451:17:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 1610,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13451:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1623,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1613,
                                    "name": "nc",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1545,
                                    "src": "13480:2:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                      "typeString": "struct RRUtils.NSEC3 memory"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 1616,
                                        "name": "lastOffset",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1572,
                                        "src": "13505:10:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 1620,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "id": 1617,
                                            "name": "deleteName",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1537,
                                            "src": "13517:10:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 1618,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "length",
                                          "nodeType": "MemberAccess",
                                          "src": "13517:17:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "id": 1619,
                                          "name": "lastOffset",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1572,
                                          "src": "13537:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "13517:30:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 1614,
                                        "name": "deleteName",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1537,
                                        "src": "13484:10:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 1615,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "substring",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 502,
                                      "src": "13484:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 1621,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13484:64:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                      "typeString": "struct RRUtils.NSEC3 memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 1612,
                                  "name": "hashName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1739,
                                  "src": "13471:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (struct RRUtils.NSEC3 memory,bytes memory) view returns (bytes32)"
                                  }
                                },
                                "id": 1622,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13471:78:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13451:98:2"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 1627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1624,
                                  "name": "ncNameHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1566,
                                  "src": "13570:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "expression": {
                                    "id": 1625,
                                    "name": "nc",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1545,
                                    "src": "13583:2:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                      "typeString": "struct RRUtils.NSEC3 memory"
                                    }
                                  },
                                  "id": 1626,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nextHashedOwnerName",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3389,
                                  "src": "13583:22:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "13570:35:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1647,
                                "nodeType": "Block",
                                "src": "13721:108:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 1645,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 1640,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1638,
                                          "name": "checkHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1611,
                                          "src": "13750:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                          "id": 1639,
                                          "name": "ncNameHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1566,
                                          "src": "13762:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "13750:22:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "||",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 1644,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1641,
                                          "name": "checkHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1611,
                                          "src": "13776:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 1642,
                                            "name": "nc",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1545,
                                            "src": "13788:2:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                              "typeString": "struct RRUtils.NSEC3 memory"
                                            }
                                          },
                                          "id": 1643,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "nextHashedOwnerName",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3389,
                                          "src": "13788:22:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "13776:34:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "13750:60:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "functionReturnParameters": 1549,
                                    "id": 1646,
                                    "nodeType": "Return",
                                    "src": "13743:67:2"
                                  }
                                ]
                              },
                              "id": 1648,
                              "nodeType": "IfStatement",
                              "src": "13567:262:2",
                              "trueBody": {
                                "id": 1637,
                                "nodeType": "Block",
                                "src": "13607:108:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 1635,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 1630,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1628,
                                          "name": "checkHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1611,
                                          "src": "13636:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                          "id": 1629,
                                          "name": "ncNameHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1566,
                                          "src": "13648:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "13636:22:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 1634,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1631,
                                          "name": "checkHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1611,
                                          "src": "13662:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 1632,
                                            "name": "nc",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1545,
                                            "src": "13674:2:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                              "typeString": "struct RRUtils.NSEC3 memory"
                                            }
                                          },
                                          "id": 1633,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "nextHashedOwnerName",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3389,
                                          "src": "13674:22:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "13662:34:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "13636:60:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "functionReturnParameters": 1549,
                                    "id": 1636,
                                    "nodeType": "Return",
                                    "src": "13629:67:2"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1651,
                            "name": "lastOffset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1572,
                            "src": "13856:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1652,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1576,
                            "src": "13869:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13856:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1654,
                        "nodeType": "ExpressionStatement",
                        "src": "13856:19:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1584,
                      "name": "offset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1576,
                      "src": "13169:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1585,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1537,
                        "src": "13178:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1586,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13178:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13169:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1656,
                  "initializationExpression": {
                    "assignments": [
                      1576
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1576,
                        "mutability": "mutable",
                        "name": "offset",
                        "nodeType": "VariableDeclaration",
                        "scope": 1656,
                        "src": "13126:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1575,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "13126:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1583,
                    "initialValue": {
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 1582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1579,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13161:1:2",
                            "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"
                            }
                          ],
                          "expression": {
                            "id": 1577,
                            "name": "deleteName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1537,
                            "src": "13140:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "readUint8",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 311,
                          "src": "13140:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                          }
                        },
                        "id": 1580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13140:23:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 1581,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13166:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "13140:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13126:41:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1588,
                        "name": "offset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1576,
                        "src": "13197:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 1594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 1591,
                              "name": "offset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1576,
                              "src": "13228:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1589,
                              "name": "deleteName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1537,
                              "src": "13207:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "readUint8",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 311,
                            "src": "13207:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                            }
                          },
                          "id": 1592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13207:28:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13238:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "13207:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "13197:42:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1596,
                    "nodeType": "ExpressionStatement",
                    "src": "13197:42:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "13122:764:2"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 1657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13975:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1549,
                  "id": 1658,
                  "nodeType": "Return",
                  "src": "13968:12:2"
                }
              ]
            },
            "id": 1660,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isCoveringNSEC3Record",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1535,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12604:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1534,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12604:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1537,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12623:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1536,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12623:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1539,
                  "mutability": "mutable",
                  "name": "ceName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12648:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1538,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12648:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1541,
                  "mutability": "mutable",
                  "name": "ce",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12669:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1540,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "12669:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1543,
                  "mutability": "mutable",
                  "name": "ncName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12694:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1542,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12694:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1545,
                  "mutability": "mutable",
                  "name": "nc",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12715:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1544,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "12715:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12603:136:2"
            },
            "returnParameters": {
              "id": 1549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1548,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12761:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1547,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12761:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12760:6:2"
            },
            "scope": 2629,
            "src": "12573:1414:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1687,
              "nodeType": "Block",
              "src": "14084:148:2",
              "statements": [
                {
                  "assignments": [
                    1670
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1670,
                      "mutability": "mutable",
                      "name": "iter",
                      "nodeType": "VariableDeclaration",
                      "scope": 1687,
                      "src": "14094:30:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator"
                      },
                      "typeName": {
                        "id": 1669,
                        "name": "RRUtils.RRIterator",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3030,
                        "src": "14094:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1674,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 1671,
                        "name": "ss",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1662,
                        "src": "14127:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 1672,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rrs",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3015,
                      "src": "14127:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_struct$_SignedSet_$2900_memory_ptr_$",
                        "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.RRIterator memory)"
                      }
                    },
                    "id": 1673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14127:8:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                      "typeString": "struct RRUtils.RRIterator memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14094:41:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1678,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1670,
                          "src": "14172:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1679,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rdataOffset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3027,
                        "src": "14172:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 1680,
                            "name": "iter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1670,
                            "src": "14190:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                              "typeString": "struct RRUtils.RRIterator memory"
                            }
                          },
                          "id": 1681,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nextOffset",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3029,
                          "src": "14190:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "expression": {
                            "id": 1682,
                            "name": "iter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1670,
                            "src": "14208:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                              "typeString": "struct RRUtils.RRIterator memory"
                            }
                          },
                          "id": 1683,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rdataOffset",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3027,
                          "src": "14208:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14190:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "expression": {
                          "id": 1675,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1670,
                          "src": "14152:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1676,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3017,
                        "src": "14152:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1677,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "readNSEC3",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3530,
                      "src": "14152:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_struct$_NSEC3_$3392_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (struct RRUtils.NSEC3 memory)"
                      }
                    },
                    "id": 1685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14152:73:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                      "typeString": "struct RRUtils.NSEC3 memory"
                    }
                  },
                  "functionReturnParameters": 1666,
                  "id": 1686,
                  "nodeType": "Return",
                  "src": "14145:80:2"
                }
              ]
            },
            "id": 1688,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readNSEC3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1662,
                  "mutability": "mutable",
                  "name": "ss",
                  "nodeType": "VariableDeclaration",
                  "scope": 1688,
                  "src": "14012:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 1661,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "14012:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14011:29:2"
            },
            "returnParameters": {
              "id": 1666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1665,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1688,
                  "src": "14062:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1664,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "14062:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14061:22:2"
            },
            "scope": 2629,
            "src": "13993:239:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1716,
              "nodeType": "Block",
              "src": "14365:326:2",
              "statements": [
                {
                  "assignments": [
                    1700
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1700,
                      "mutability": "mutable",
                      "name": "deleteNameHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1716,
                      "src": "14437:22:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1699,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "14437:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1705,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1702,
                        "name": "nsec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1690,
                        "src": "14471:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        }
                      },
                      {
                        "id": 1703,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1694,
                        "src": "14477:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1701,
                      "name": "hashName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1739,
                      "src": "14462:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (struct RRUtils.NSEC3 memory,bytes memory) view returns (bytes32)"
                      }
                    },
                    "id": 1704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14462:26:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14437:51:2"
                },
                {
                  "assignments": [
                    1707
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1707,
                      "mutability": "mutable",
                      "name": "nsecNameHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1716,
                      "src": "14583:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1706,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "14583:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1711,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1709,
                        "name": "ownerName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1692,
                        "src": "14626:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1708,
                      "name": "decodeOwnerNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1759,
                      "src": "14606:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14606:30:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14583:53:2"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1712,
                      "name": "deleteNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1700,
                      "src": "14654:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 1713,
                      "name": "nsecNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1707,
                      "src": "14672:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "14654:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1698,
                  "id": 1715,
                  "nodeType": "Return",
                  "src": "14647:37:2"
                }
              ]
            },
            "id": 1717,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkNSEC3Name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1690,
                  "mutability": "mutable",
                  "name": "nsec",
                  "nodeType": "VariableDeclaration",
                  "scope": 1717,
                  "src": "14262:25:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1689,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "14262:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1692,
                  "mutability": "mutable",
                  "name": "ownerName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1717,
                  "src": "14289:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1691,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14289:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1694,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1717,
                  "src": "14313:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1693,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14313:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14261:76:2"
            },
            "returnParameters": {
              "id": 1698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1697,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1717,
                  "src": "14359:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1696,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14359:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14358:6:2"
            },
            "scope": 2629,
            "src": "14238:453:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1738,
              "nodeType": "Block",
              "src": "14791:95:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1731,
                          "name": "nsec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1719,
                          "src": "14846:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        },
                        "id": 1732,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "salt",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3387,
                        "src": "14846:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1733,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1721,
                        "src": "14857:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 1734,
                          "name": "nsec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1719,
                          "src": "14863:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        },
                        "id": 1735,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "iterations",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3385,
                        "src": "14863:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 1726,
                          "name": "nsec3Digests",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 904,
                          "src": "14808:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_NSEC3Digest_$5847_$",
                            "typeString": "mapping(uint8 => contract NSEC3Digest)"
                          }
                        },
                        "id": 1729,
                        "indexExpression": {
                          "expression": {
                            "id": 1727,
                            "name": "nsec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1719,
                            "src": "14821:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                              "typeString": "struct RRUtils.NSEC3 memory"
                            }
                          },
                          "id": 1728,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hashAlgorithm",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3381,
                          "src": "14821:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14808:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                          "typeString": "contract NSEC3Digest"
                        }
                      },
                      "id": 1730,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5846,
                      "src": "14808:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,bytes memory,uint256) pure external returns (bytes32)"
                      }
                    },
                    "id": 1736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14808:71:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1725,
                  "id": 1737,
                  "nodeType": "Return",
                  "src": "14801:78:2"
                }
              ]
            },
            "id": 1739,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hashName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1719,
                  "mutability": "mutable",
                  "name": "nsec",
                  "nodeType": "VariableDeclaration",
                  "scope": 1739,
                  "src": "14715:25:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1718,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "14715:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1721,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1739,
                  "src": "14742:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1720,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14742:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14714:46:2"
            },
            "returnParameters": {
              "id": 1725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1724,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1739,
                  "src": "14782:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1723,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14782:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14781:9:2"
            },
            "scope": 2629,
            "src": "14697:189:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1758,
              "nodeType": "Block",
              "src": "14970:76:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "31",
                        "id": 1748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15012:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15035:1:2",
                                "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"
                                }
                              ],
                              "expression": {
                                "id": 1751,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1741,
                                "src": "15020:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "readUint8",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 311,
                              "src": "15020:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                              }
                            },
                            "id": 1754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15020:17:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 1750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15015:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1749,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15015:4:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1755,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15015:23:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 1746,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1741,
                        "src": "14987:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "base32HexDecodeWord",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 729,
                      "src": "14987:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 1756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14987:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1745,
                  "id": 1757,
                  "nodeType": "Return",
                  "src": "14980:59:2"
                }
              ]
            },
            "id": 1759,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decodeOwnerNameHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1741,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1759,
                  "src": "14921:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1740,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14921:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14920:19:2"
            },
            "returnParameters": {
              "id": 1745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1744,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1759,
                  "src": "14961:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1743,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14961:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14960:9:2"
            },
            "scope": 2629,
            "src": "14892:154:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1808,
              "nodeType": "Block",
              "src": "15156:384:2",
              "statements": [
                {
                  "assignments": [
                    1769
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1769,
                      "mutability": "mutable",
                      "name": "nsecNameOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1808,
                      "src": "15166:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1768,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15166:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1776,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 1775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15207:1:2",
                          "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"
                          }
                        ],
                        "expression": {
                          "id": 1770,
                          "name": "nsecName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1761,
                          "src": "15188:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "readUint8",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 311,
                        "src": "15188:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                        }
                      },
                      "id": 1773,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15188:21:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 1774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15212:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "15188:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15166:47:2"
                },
                {
                  "assignments": [
                    1778
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1778,
                      "mutability": "mutable",
                      "name": "deleteNameOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1808,
                      "src": "15223:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1777,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15223:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1780,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 1779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15247:1:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15223:25:2"
                },
                {
                  "body": {
                    "id": 1804,
                    "nodeType": "Block",
                    "src": "15302:210:2",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 1787,
                              "name": "deleteNameOffset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1778,
                              "src": "15337:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1788,
                              "name": "nsecName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1761,
                              "src": "15355:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1789,
                              "name": "nsecNameOffset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1769,
                              "src": "15365:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1785,
                              "name": "deleteName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1763,
                              "src": "15319:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "equals",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 240,
                            "src": "15319:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,bytes memory,uint256) pure returns (bool)"
                            }
                          },
                          "id": 1790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15319:61:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1794,
                        "nodeType": "IfStatement",
                        "src": "15316:110:2",
                        "trueBody": {
                          "id": 1793,
                          "nodeType": "Block",
                          "src": "15382:44:2",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 1791,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15407:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 1767,
                              "id": 1792,
                              "nodeType": "Return",
                              "src": "15400:11:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1802,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1795,
                            "name": "deleteNameOffset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1778,
                            "src": "15439:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 1801,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 1798,
                                  "name": "deleteNameOffset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1778,
                                  "src": "15480:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 1796,
                                  "name": "deleteName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1763,
                                  "src": "15459:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 1797,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "readUint8",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 311,
                                "src": "15459:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                                }
                              },
                              "id": 1799,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15459:38:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 1800,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15500:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "15459:42:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15439:62:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1803,
                        "nodeType": "ExpressionStatement",
                        "src": "15439:62:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1781,
                      "name": "deleteNameOffset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1778,
                      "src": "15264:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1782,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1763,
                        "src": "15283:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "15283:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15264:36:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1805,
                  "nodeType": "WhileStatement",
                  "src": "15258:254:2"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 1806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15528:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1767,
                  "id": 1807,
                  "nodeType": "Return",
                  "src": "15521:12:2"
                }
              ]
            },
            "id": 1809,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkNSEC3OwnerName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1761,
                  "mutability": "mutable",
                  "name": "nsecName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1809,
                  "src": "15081:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1760,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15081:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1763,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1809,
                  "src": "15104:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1762,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15104:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15080:48:2"
            },
            "returnParameters": {
              "id": 1767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1766,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1809,
                  "src": "15150:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1765,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15150:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15149:6:2"
            },
            "scope": 2629,
            "src": "15052:488:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              819
            ],
            "body": {
              "id": 1842,
              "nodeType": "Block",
              "src": "16143:137:2",
              "statements": [
                {
                  "assignments": [
                    1825
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1825,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1842,
                      "src": "16153:20:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                        "typeString": "struct DNSSECImpl.RRSet"
                      },
                      "typeName": {
                        "id": 1824,
                        "name": "RRSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 886,
                        "src": "16153:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                          "typeString": "struct DNSSECImpl.RRSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1833,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 1826,
                        "name": "rrsets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 892,
                        "src": "16176:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                          "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                        }
                      },
                      "id": 1830,
                      "indexExpression": {
                        "arguments": [
                          {
                            "id": 1828,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1814,
                            "src": "16193:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "id": 1827,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "16183:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 1829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16183:15:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16176:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                        "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                      }
                    },
                    "id": 1832,
                    "indexExpression": {
                      "id": 1831,
                      "name": "dnstype",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1812,
                      "src": "16200:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16176:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSet_$886_storage",
                      "typeString": "struct DNSSECImpl.RRSet storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16153:55:2"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "id": 1834,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1825,
                          "src": "16226:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                            "typeString": "struct DNSSECImpl.RRSet storage pointer"
                          }
                        },
                        "id": 1835,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "inception",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 881,
                        "src": "16226:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "expression": {
                          "id": 1836,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1825,
                          "src": "16244:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                            "typeString": "struct DNSSECImpl.RRSet storage pointer"
                          }
                        },
                        "id": 1837,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "inserted",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 883,
                        "src": "16244:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "expression": {
                          "id": 1838,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1825,
                          "src": "16261:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                            "typeString": "struct DNSSECImpl.RRSet storage pointer"
                          }
                        },
                        "id": 1839,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 885,
                        "src": "16261:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      }
                    ],
                    "id": 1840,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "16225:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_uint64_$_t_bytes20_$",
                      "typeString": "tuple(uint32,uint64,bytes20)"
                    }
                  },
                  "functionReturnParameters": 1823,
                  "id": 1841,
                  "nodeType": "Return",
                  "src": "16218:55:2"
                }
              ]
            },
            "documentation": {
              "id": 1810,
              "nodeType": "StructuredDocumentation",
              "src": "15546:482:2",
              "text": " @dev Returns data about the RRs (if any) known to this oracle with the provided type and name.\n @param dnstype The DNS record type to query.\n @param name The name to query, in DNS label-sequence format.\n @return inception The unix timestamp at which the signature for this RRSET was created.\n @return inserted The unix timestamp at which this RRSET was inserted into the oracle.\n @return hash The hash of the RRset that was inserted."
            },
            "functionSelector": "087991bc",
            "id": 1843,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rrdata",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1816,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16095:8:2"
            },
            "parameters": {
              "id": 1815,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1812,
                  "mutability": "mutable",
                  "name": "dnstype",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16049:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1811,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "16049:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1814,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16065:19:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1813,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16065:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16048:37:2"
            },
            "returnParameters": {
              "id": 1823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1818,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16118:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1817,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16118:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1820,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16126:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1819,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16126:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1822,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16134:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 1821,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "16134:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16117:25:2"
            },
            "scope": 2629,
            "src": "16033:247:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1932,
              "nodeType": "Block",
              "src": "16393:680:2",
              "statements": [
                {
                  "assignments": [
                    1855
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1855,
                      "mutability": "mutable",
                      "name": "rrset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1932,
                      "src": "16403:30:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet"
                      },
                      "typeName": {
                        "id": 1854,
                        "name": "RRUtils.SignedSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2900,
                        "src": "16403:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                          "typeString": "struct RRUtils.SignedSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1856,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16403:30:2"
                },
                {
                  "expression": {
                    "id": 1862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1857,
                      "name": "rrset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1855,
                      "src": "16443:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1859,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1845,
                          "src": "16469:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        {
                          "id": 1860,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1847,
                          "src": "16476:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1858,
                        "name": "validateSignedSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2018,
                        "src": "16451:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) view returns (struct RRUtils.SignedSet memory)"
                        }
                      },
                      "id": 1861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16451:31:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "src": "16443:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "id": 1863,
                  "nodeType": "ExpressionStatement",
                  "src": "16443:39:2"
                },
                {
                  "assignments": [
                    1865
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1865,
                      "mutability": "mutable",
                      "name": "storedSet",
                      "nodeType": "VariableDeclaration",
                      "scope": 1932,
                      "src": "16493:23:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                        "typeString": "struct DNSSECImpl.RRSet"
                      },
                      "typeName": {
                        "id": 1864,
                        "name": "RRSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 886,
                        "src": "16493:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                          "typeString": "struct DNSSECImpl.RRSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1875,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 1866,
                        "name": "rrsets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 892,
                        "src": "16519:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                          "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                        }
                      },
                      "id": 1871,
                      "indexExpression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 1868,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1855,
                              "src": "16536:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 1869,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "name",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2899,
                            "src": "16536:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 1867,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "16526:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 1870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16526:21:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16519:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                        "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                      }
                    },
                    "id": 1874,
                    "indexExpression": {
                      "expression": {
                        "id": 1872,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1855,
                        "src": "16549:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 1873,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "typeCovered",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2881,
                      "src": "16549:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16519:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSet_$886_storage",
                      "typeString": "struct DNSSECImpl.RRSet storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16493:74:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1876,
                        "name": "storedSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1865,
                        "src": "16581:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                          "typeString": "struct DNSSECImpl.RRSet storage pointer"
                        }
                      },
                      "id": 1877,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "inserted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 883,
                      "src": "16581:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16602:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16581:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1894,
                  "nodeType": "IfStatement",
                  "src": "16577:194:2",
                  "trueBody": {
                    "id": 1893,
                    "nodeType": "Block",
                    "src": "16605:166:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int32",
                                "typeString": "int32"
                              },
                              "id": 1890,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    },
                                    "id": 1887,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 1883,
                                        "name": "rrset",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1855,
                                        "src": "16716:5:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                          "typeString": "struct RRUtils.SignedSet memory"
                                        }
                                      },
                                      "id": 1884,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "inception",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2891,
                                      "src": "16716:15:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 1885,
                                        "name": "storedSet",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1865,
                                        "src": "16734:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                                          "typeString": "struct DNSSECImpl.RRSet storage pointer"
                                        }
                                      },
                                      "id": 1886,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "inception",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 881,
                                      "src": "16734:19:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "src": "16716:37:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  ],
                                  "id": 1882,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16710:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_int32_$",
                                    "typeString": "type(int32)"
                                  },
                                  "typeName": {
                                    "id": 1881,
                                    "name": "int32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16710:5:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1888,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16710:44:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int32",
                                  "typeString": "int32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1889,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16758:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "16710:49:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1880,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "16702:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16702:58:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1892,
                        "nodeType": "ExpressionStatement",
                        "src": "16702:58:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1895,
                          "name": "rrsets",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 892,
                          "src": "16781:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                          }
                        },
                        "id": 1902,
                        "indexExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1897,
                                "name": "rrset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1855,
                                "src": "16798:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                  "typeString": "struct RRUtils.SignedSet memory"
                                }
                              },
                              "id": 1898,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "name",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2899,
                              "src": "16798:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1896,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "16788:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1899,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16788:21:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16781:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                          "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                        }
                      },
                      "id": 1903,
                      "indexExpression": {
                        "expression": {
                          "id": 1900,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1855,
                          "src": "16811:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1901,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "typeCovered",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2881,
                        "src": "16811:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16781:48:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_storage",
                        "typeString": "struct DNSSECImpl.RRSet storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 1905,
                            "name": "rrset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1855,
                            "src": "16863:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1906,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inception",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2891,
                          "src": "16863:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1909,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "16909:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 1910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "16909:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1908,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16902:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint64_$",
                              "typeString": "type(uint64)"
                            },
                            "typeName": {
                              "id": 1907,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "16902:6:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16902:23:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1915,
                                    "name": "rrset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1855,
                                    "src": "16963:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                      "typeString": "struct RRUtils.SignedSet memory"
                                    }
                                  },
                                  "id": 1916,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "data",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2897,
                                  "src": "16963:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 1914,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "16953:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 1917,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16953:21:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1913,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16945:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes20_$",
                              "typeString": "type(bytes20)"
                            },
                            "typeName": {
                              "id": 1912,
                              "name": "bytes20",
                              "nodeType": "ElementaryTypeName",
                              "src": "16945:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16945:30:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        ],
                        "id": 1904,
                        "name": "RRSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 886,
                        "src": "16832:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_RRSet_$886_storage_ptr_$",
                          "typeString": "type(struct DNSSECImpl.RRSet storage pointer)"
                        }
                      },
                      "id": 1919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "inception",
                        "inserted",
                        "hash"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "16832:154:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_memory_ptr",
                        "typeString": "struct DNSSECImpl.RRSet memory"
                      }
                    },
                    "src": "16781:205:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSet_$886_storage",
                      "typeString": "struct DNSSECImpl.RRSet storage ref"
                    }
                  },
                  "id": 1921,
                  "nodeType": "ExpressionStatement",
                  "src": "16781:205:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1923,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1855,
                          "src": "17015:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1924,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "name",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2899,
                        "src": "17015:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 1925,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1855,
                          "src": "17027:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1926,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2897,
                        "src": "17027:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1922,
                      "name": "RRSetUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 764,
                      "src": "17002:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,bytes memory)"
                      }
                    },
                    "id": 1927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17002:36:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1928,
                  "nodeType": "EmitStatement",
                  "src": "16997:41:2"
                },
                {
                  "expression": {
                    "expression": {
                      "id": 1929,
                      "name": "rrset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1855,
                      "src": "17056:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "id": 1930,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "data",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2897,
                    "src": "17056:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1851,
                  "id": 1931,
                  "nodeType": "Return",
                  "src": "17049:17:2"
                }
              ]
            },
            "id": 1933,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_submitRRSet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1848,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1845,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "16308:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1844,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "16308:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1847,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "16341:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1846,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16341:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16307:53:2"
            },
            "returnParameters": {
              "id": 1851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1850,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "16379:12:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1849,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16379:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16378:14:2"
            },
            "scope": 2629,
            "src": "16286:787:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2017,
              "nodeType": "Block",
              "src": "17927:1033:2",
              "statements": [
                {
                  "expression": {
                    "id": 1948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1943,
                      "name": "rrset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1941,
                      "src": "17937:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "expression": {
                            "id": 1944,
                            "name": "input",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1936,
                            "src": "17945:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                              "typeString": "struct DNSSEC.RRSetWithSignature memory"
                            }
                          },
                          "id": 1945,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rrset",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 737,
                          "src": "17945:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "readSignedSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3001,
                        "src": "17945:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) pure returns (struct RRUtils.SignedSet memory)"
                        }
                      },
                      "id": 1947,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17945:27:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "src": "17937:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "id": 1949,
                  "nodeType": "ExpressionStatement",
                  "src": "17937:35:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 1952,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1941,
                              "src": "18001:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 1953,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signerName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2895,
                            "src": "18001:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "id": 1954,
                            "name": "proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1938,
                            "src": "18019:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 1951,
                          "name": "validProof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2054,
                          "src": "17990:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes memory,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 1955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17990:35:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1950,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17982:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17982:44:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1957,
                  "nodeType": "ExpressionStatement",
                  "src": "17982:44:2"
                },
                {
                  "assignments": [
                    1959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1959,
                      "mutability": "mutable",
                      "name": "name",
                      "nodeType": "VariableDeclaration",
                      "scope": 2017,
                      "src": "18101:17:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1958,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "18101:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1965,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1961,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1941,
                        "src": "18133:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 1962,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1941,
                          "src": "18140:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1963,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "typeCovered",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2881,
                        "src": "18140:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 1960,
                      "name": "validateRRs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2135,
                      "src": "18121:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$_t_uint16_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (struct RRUtils.SignedSet memory,uint16) pure returns (bytes memory)"
                      }
                    },
                    "id": 1964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18121:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18101:57:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 1969,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18192:1:2",
                              "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"
                              }
                            ],
                            "expression": {
                              "id": 1967,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1959,
                              "src": "18176:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1968,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "labelCount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2855,
                            "src": "18176:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18176:18:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 1971,
                            "name": "rrset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1941,
                            "src": "18198:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1972,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "labels",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2885,
                          "src": "18198:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "18176:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1966,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18168:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18168:43:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1975,
                  "nodeType": "ExpressionStatement",
                  "src": "18168:43:2"
                },
                {
                  "expression": {
                    "id": 1980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1976,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1941,
                        "src": "18221:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 1978,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "name",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2899,
                      "src": "18221:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1979,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1959,
                      "src": "18234:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "18221:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 1981,
                  "nodeType": "ExpressionStatement",
                  "src": "18221:17:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "id": 1992,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1989,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1985,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "18582:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 1986,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "expiration",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2889,
                                "src": "18582:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "expression": {
                                  "id": 1987,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "18601:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 1988,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "18601:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18582:34:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1984,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18576:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int32_$",
                              "typeString": "type(int32)"
                            },
                            "typeName": {
                              "id": 1983,
                              "name": "int32",
                              "nodeType": "ElementaryTypeName",
                              "src": "18576:5:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18576:41:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18621:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "18576:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1982,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18568:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18568:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1994,
                  "nodeType": "ExpressionStatement",
                  "src": "18568:55:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "id": 2005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1998,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "18803:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 1999,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "18803:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "expression": {
                                  "id": 2000,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "18821:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 2001,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "inception",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2891,
                                "src": "18821:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "src": "18803:33:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18797:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int32_$",
                              "typeString": "type(int32)"
                            },
                            "typeName": {
                              "id": 1996,
                              "name": "int32",
                              "nodeType": "ElementaryTypeName",
                              "src": "18797:5:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 2003,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18797:40:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 2004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18841:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "18797:45:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1995,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18789:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18789:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2007,
                  "nodeType": "ExpressionStatement",
                  "src": "18789:54:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2009,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1959,
                        "src": "18904:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 2010,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1941,
                        "src": "18910:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      {
                        "id": 2011,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1936,
                        "src": "18917:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        }
                      },
                      {
                        "id": 2012,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1938,
                        "src": "18924:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2008,
                      "name": "verifySignature",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2214,
                      "src": "18888:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory,bytes memory) view"
                      }
                    },
                    "id": 2013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18888:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2014,
                  "nodeType": "ExpressionStatement",
                  "src": "18888:42:2"
                },
                {
                  "expression": {
                    "id": 2015,
                    "name": "rrset",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1941,
                    "src": "18948:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "functionReturnParameters": 1942,
                  "id": 2016,
                  "nodeType": "Return",
                  "src": "18941:12:2"
                }
              ]
            },
            "documentation": {
              "id": 1934,
              "nodeType": "StructuredDocumentation",
              "src": "17079:709:2",
              "text": " @dev Submits a signed set of RRs to the oracle.\n RRSETs are only accepted if they are signed with a key that is already\n trusted, or if they are self-signed, and the signing key is identified by\n a DS record that is already trusted.\n @param input The signed RR set. This is in the format described in section\n        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n        data, followed by a series of canonicalised RR records that the signature\n        applies to.\n @param proof The DNSKEY or DS to validate the signature against. Must Already\n        have been submitted and proved previously."
            },
            "id": 2018,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validateSignedSet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1936,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "17820:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1935,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "17820:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1938,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "17853:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1937,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "17853:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17819:53:2"
            },
            "returnParameters": {
              "id": 1942,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1941,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "17895:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 1940,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "17895:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17894:32:2"
            },
            "scope": 2629,
            "src": "17793:1167:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2053,
              "nodeType": "Block",
              "src": "19053:154:2",
              "statements": [
                {
                  "assignments": [
                    2028
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2028,
                      "mutability": "mutable",
                      "name": "dnstype",
                      "nodeType": "VariableDeclaration",
                      "scope": 2053,
                      "src": "19063:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 2027,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "19063:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2036,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 2033,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19114:1:2",
                            "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"
                            }
                          ],
                          "expression": {
                            "id": 2031,
                            "name": "proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2022,
                            "src": "19097:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2032,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nameLength",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2781,
                          "src": "19097:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 2034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19097:19:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 2029,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2022,
                        "src": "19080:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2030,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "readUint16",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 331,
                      "src": "19080:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint16_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256) pure returns (uint16)"
                      }
                    },
                    "id": 2035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19080:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19063:54:2"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    },
                    "id": 2051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 2037,
                            "name": "rrsets",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 892,
                            "src": "19134:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                              "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                            }
                          },
                          "id": 2041,
                          "indexExpression": {
                            "arguments": [
                              {
                                "id": 2039,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2020,
                                "src": "19151:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 2038,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "19141:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 2040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19141:15:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19134:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                            "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                          }
                        },
                        "id": 2043,
                        "indexExpression": {
                          "id": 2042,
                          "name": "dnstype",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2028,
                          "src": "19158:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19134:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSet_$886_storage",
                          "typeString": "struct DNSSECImpl.RRSet storage ref"
                        }
                      },
                      "id": 2044,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 885,
                      "src": "19134:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 2048,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2022,
                              "src": "19193:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2047,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "19183:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 2049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19183:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 2046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "19175:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes20_$",
                          "typeString": "type(bytes20)"
                        },
                        "typeName": {
                          "id": 2045,
                          "name": "bytes20",
                          "nodeType": "ElementaryTypeName",
                          "src": "19175:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19175:25:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      }
                    },
                    "src": "19134:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2026,
                  "id": 2052,
                  "nodeType": "Return",
                  "src": "19127:73:2"
                }
              ]
            },
            "id": 2054,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2020,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2054,
                  "src": "18986:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "18986:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2022,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2054,
                  "src": "19005:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2021,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "19005:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18985:39:2"
            },
            "returnParameters": {
              "id": 2026,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2025,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2054,
                  "src": "19047:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2024,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19047:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19046:6:2"
            },
            "scope": 2629,
            "src": "18966:241:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2134,
              "nodeType": "Block",
              "src": "19476:764:2",
              "statements": [
                {
                  "body": {
                    "id": 2132,
                    "nodeType": "Block",
                    "src": "19600:634:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 2084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2081,
                                  "name": "iter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2067,
                                  "src": "19673:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2082,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "class",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3023,
                                "src": "19673:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 2083,
                                "name": "DNSCLASS_IN",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 846,
                                "src": "19687:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "19673:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2080,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "19665:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19665:34:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2086,
                        "nodeType": "ExpressionStatement",
                        "src": "19665:34:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2087,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2062,
                              "src": "19717:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2088,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "19717:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2089,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19732:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19717:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2123,
                          "nodeType": "Block",
                          "src": "19792:300:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2107,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 2099,
                                        "name": "name",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2062,
                                        "src": "19950:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 2100,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "19950:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 2104,
                                            "name": "iter",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2067,
                                            "src": "19986:4:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                              "typeString": "struct RRUtils.RRIterator memory"
                                            }
                                          },
                                          "id": 2105,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "offset",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3019,
                                          "src": "19986:11:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "expression": {
                                            "id": 2101,
                                            "name": "iter",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2067,
                                            "src": "19965:4:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                              "typeString": "struct RRUtils.RRIterator memory"
                                            }
                                          },
                                          "id": 2102,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "data",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3017,
                                          "src": "19965:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2103,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "nameLength",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2781,
                                        "src": "19965:20:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2106,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "19965:33:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "19950:48:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 2098,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "19942:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 2108,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19942:57:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2109,
                              "nodeType": "ExpressionStatement",
                              "src": "19942:57:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 2113,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "20037:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      {
                                        "expression": {
                                          "id": 2114,
                                          "name": "iter",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2067,
                                          "src": "20040:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                            "typeString": "struct RRUtils.RRIterator memory"
                                          }
                                        },
                                        "id": 2115,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "data",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3017,
                                        "src": "20040:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 2116,
                                          "name": "iter",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2067,
                                          "src": "20051:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                            "typeString": "struct RRUtils.RRIterator memory"
                                          }
                                        },
                                        "id": 2117,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "offset",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3019,
                                        "src": "20051:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 2118,
                                          "name": "name",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2062,
                                          "src": "20064:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2119,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "20064:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 2111,
                                        "name": "name",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2062,
                                        "src": "20025:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 2112,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "equals",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 208,
                                      "src": "20025:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure returns (bool)"
                                      }
                                    },
                                    "id": 2120,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "20025:51:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 2110,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "20017:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 2121,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20017:60:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2122,
                              "nodeType": "ExpressionStatement",
                              "src": "20017:60:2"
                            }
                          ]
                        },
                        "id": 2124,
                        "nodeType": "IfStatement",
                        "src": "19714:378:2",
                        "trueBody": {
                          "id": 2097,
                          "nodeType": "Block",
                          "src": "19735:51:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 2095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2091,
                                  "name": "name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2062,
                                  "src": "19753:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 2092,
                                      "name": "iter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2067,
                                      "src": "19760:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                        "typeString": "struct RRUtils.RRIterator memory"
                                      }
                                    },
                                    "id": 2093,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "name",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3198,
                                    "src": "19760:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                                      "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 2094,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19760:11:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "src": "19753:18:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2096,
                              "nodeType": "ExpressionStatement",
                              "src": "19753:18:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 2129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2126,
                                  "name": "iter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2067,
                                  "src": "20195:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2127,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "dnstype",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3021,
                                "src": "20195:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 2128,
                                "name": "typecovered",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2059,
                                "src": "20211:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "20195:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2125,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "20187:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20187:36:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2131,
                        "nodeType": "ExpressionStatement",
                        "src": "20187:36:2"
                      }
                    ]
                  },
                  "condition": {
                    "id": 2075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "19573:12:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2072,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2067,
                          "src": "19574:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2073,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "19574:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 2074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19574:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2133,
                  "initializationExpression": {
                    "assignments": [
                      2067
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2067,
                        "mutability": "mutable",
                        "name": "iter",
                        "nodeType": "VariableDeclaration",
                        "scope": 2133,
                        "src": "19527:30:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        },
                        "typeName": {
                          "id": 2066,
                          "name": "RRUtils.RRIterator",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3030,
                          "src": "19527:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                            "typeString": "struct RRUtils.RRIterator"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2071,
                    "initialValue": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2068,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2057,
                          "src": "19560:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 2069,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3015,
                        "src": "19560:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.RRIterator memory)"
                        }
                      },
                      "id": 2070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19560:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator memory"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "19527:44:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2076,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2067,
                          "src": "19587:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2077,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "19587:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 2078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19587:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 2079,
                    "nodeType": "ExpressionStatement",
                    "src": "19587:11:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "19522:712:2"
                }
              ]
            },
            "documentation": {
              "id": 2055,
              "nodeType": "StructuredDocumentation",
              "src": "19213:143:2",
              "text": " @dev Validates a set of RRs.\n @param rrset The RR set.\n @param typecovered The type covered by the RRSIG record."
            },
            "id": 2135,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validateRRs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2057,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2135,
                  "src": "19382:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2056,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "19382:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2059,
                  "mutability": "mutable",
                  "name": "typecovered",
                  "nodeType": "VariableDeclaration",
                  "scope": 2135,
                  "src": "19414:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 2058,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "19414:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19381:52:2"
            },
            "returnParameters": {
              "id": 2063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2062,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2135,
                  "src": "19457:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2061,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "19457:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19456:19:2"
            },
            "scope": 2629,
            "src": "19361:879:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2213,
              "nodeType": "Block",
              "src": "20728:656:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2153,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "expression": {
                              "id": 2148,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2140,
                              "src": "20863:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 2149,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signerName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2895,
                            "src": "20863:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "20863:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 2151,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2138,
                            "src": "20890:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "20890:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "20863:38:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2147,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "20855:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20855:47:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2155,
                  "nodeType": "ExpressionStatement",
                  "src": "20855:47:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 2160,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20944:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "id": 2161,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2138,
                            "src": "20947:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2162,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2138,
                                "src": "20953:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2163,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "20953:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "expression": {
                                  "id": 2164,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2140,
                                  "src": "20967:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 2165,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "signerName",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2895,
                                "src": "20967:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "20967:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20953:37:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "expression": {
                              "id": 2157,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2140,
                              "src": "20920:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 2158,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signerName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2895,
                            "src": "20920:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "equals",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 240,
                          "src": "20920:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256,bytes memory,uint256) pure returns (bool)"
                          }
                        },
                        "id": 2168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20920:71:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2156,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "20912:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20912:80:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2170,
                  "nodeType": "ExpressionStatement",
                  "src": "20912:80:2"
                },
                {
                  "assignments": [
                    2174
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2174,
                      "mutability": "mutable",
                      "name": "proofRR",
                      "nodeType": "VariableDeclaration",
                      "scope": 2213,
                      "src": "21003:33:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator"
                      },
                      "typeName": {
                        "id": 2173,
                        "name": "RRUtils.RRIterator",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3030,
                        "src": "21003:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2179,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 2177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21056:1:2",
                        "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"
                        }
                      ],
                      "expression": {
                        "id": 2175,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2144,
                        "src": "21039:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "iterateRRs",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3057,
                      "src": "21039:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256) pure returns (struct RRUtils.RRIterator memory)"
                      }
                    },
                    "id": 2178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21039:19:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                      "typeString": "struct RRUtils.RRIterator memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21003:55:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 2183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2180,
                        "name": "proofRR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2174,
                        "src": "21099:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator memory"
                        }
                      },
                      "id": 2181,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "dnstype",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3021,
                      "src": "21099:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 2182,
                      "name": "DNSTYPE_DS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 858,
                      "src": "21118:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "21099:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "id": 2196,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2193,
                          "name": "proofRR",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2174,
                          "src": "21208:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2194,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "dnstype",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3021,
                        "src": "21208:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 2195,
                        "name": "DNSTYPE_DNSKEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 867,
                        "src": "21227:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "21208:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 2210,
                      "nodeType": "Block",
                      "src": "21323:55:2",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "hexValue": "4e6f2076616c69642070726f6f6620666f756e64",
                                "id": 2207,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21344:22:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d",
                                  "typeString": "literal_string \"No valid proof found\""
                                },
                                "value": "No valid proof found"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d",
                                  "typeString": "literal_string \"No valid proof found\""
                                }
                              ],
                              "id": 2206,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -19,
                                -19
                              ],
                              "referencedDeclaration": -19,
                              "src": "21337:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (string memory) pure"
                              }
                            },
                            "id": 2208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21337:30:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2209,
                          "nodeType": "ExpressionStatement",
                          "src": "21337:30:2"
                        }
                      ]
                    },
                    "id": 2211,
                    "nodeType": "IfStatement",
                    "src": "21204:174:2",
                    "trueBody": {
                      "id": 2205,
                      "nodeType": "Block",
                      "src": "21243:74:2",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 2199,
                                    "name": "rrset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2140,
                                    "src": "21284:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                      "typeString": "struct RRUtils.SignedSet memory"
                                    }
                                  },
                                  {
                                    "id": 2200,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2142,
                                    "src": "21291:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                      "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                    }
                                  },
                                  {
                                    "id": 2201,
                                    "name": "proofRR",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2174,
                                    "src": "21297:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                      "typeString": "struct RRUtils.RRIterator memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                      "typeString": "struct RRUtils.SignedSet memory"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                      "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                      "typeString": "struct RRUtils.RRIterator memory"
                                    }
                                  ],
                                  "id": 2198,
                                  "name": "verifyWithKnownKey",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2284,
                                  "src": "21265:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$",
                                    "typeString": "function (struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory,struct RRUtils.RRIterator memory) view returns (bool)"
                                  }
                                },
                                "id": 2202,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21265:40:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 2197,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "src": "21257:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                "typeString": "function (bool) pure"
                              }
                            },
                            "id": 2203,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21257:49:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2204,
                          "nodeType": "ExpressionStatement",
                          "src": "21257:49:2"
                        }
                      ]
                    }
                  },
                  "id": 2212,
                  "nodeType": "IfStatement",
                  "src": "21095:283:2",
                  "trueBody": {
                    "id": 2192,
                    "nodeType": "Block",
                    "src": "21130:68:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2186,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2140,
                                  "src": "21165:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                {
                                  "id": 2187,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2142,
                                  "src": "21172:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                    "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                  }
                                },
                                {
                                  "id": 2188,
                                  "name": "proofRR",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2174,
                                  "src": "21178:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                    "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                ],
                                "id": 2185,
                                "name": "verifyWithDS",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2426,
                                "src": "21152:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory,struct RRUtils.RRIterator memory) view returns (bool)"
                                }
                              },
                              "id": 2189,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21152:34:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2184,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "21144:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21144:43:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2191,
                        "nodeType": "ExpressionStatement",
                        "src": "21144:43:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 2136,
              "nodeType": "StructuredDocumentation",
              "src": "20246:335:2",
              "text": " @dev Performs signature verification.\n Throws or reverts if unable to verify the record.\n @param name The name of the RRSIG record, in DNS label-sequence format.\n @param data The original data to verify.\n @param proof A DS or DNSKEY record that's already verified by the oracle."
            },
            "id": 2214,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifySignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2138,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2214,
                  "src": "20611:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2137,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20611:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2140,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2214,
                  "src": "20630:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2139,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "20630:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2142,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2214,
                  "src": "20662:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 2141,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "20662:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2144,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2214,
                  "src": "20694:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2143,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20694:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20610:103:2"
            },
            "returnParameters": {
              "id": 2146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20728:0:2"
            },
            "scope": 2629,
            "src": "20586:798:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2283,
              "nodeType": "Block",
              "src": "21896:506:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 2231,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "22012:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 2232,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signerName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2895,
                            "src": "22012:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 2227,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2221,
                                "src": "21992:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                  "typeString": "struct RRUtils.RRIterator memory"
                                }
                              },
                              "id": 2228,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "name",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3198,
                              "src": "21992:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                                "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 2229,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21992:12:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "equals",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 294,
                          "src": "21992:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 2233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21992:37:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2226,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21984:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21984:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2235,
                  "nodeType": "ExpressionStatement",
                  "src": "21984:46:2"
                },
                {
                  "body": {
                    "id": 2281,
                    "nodeType": "Block",
                    "src": "22075:321:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 2249,
                                    "name": "rrset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2217,
                                    "src": "22117:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                      "typeString": "struct RRUtils.SignedSet memory"
                                    }
                                  },
                                  "id": 2250,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "signerName",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2895,
                                  "src": "22117:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 2245,
                                      "name": "proof",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2221,
                                      "src": "22097:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                        "typeString": "struct RRUtils.RRIterator memory"
                                      }
                                    },
                                    "id": 2246,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "name",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3198,
                                    "src": "22097:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                                      "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 2247,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "22097:12:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2248,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "equals",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 294,
                                "src": "22097:19:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,bytes memory) pure returns (bool)"
                                }
                              },
                              "id": 2251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22097:37:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2244,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "22089:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22089:46:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2253,
                        "nodeType": "ExpressionStatement",
                        "src": "22089:46:2"
                      },
                      {
                        "assignments": [
                          2255
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2255,
                            "mutability": "mutable",
                            "name": "keyrdata",
                            "nodeType": "VariableDeclaration",
                            "scope": 2281,
                            "src": "22149:21:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2254,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "22149:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2259,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 2256,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2221,
                              "src": "22173:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              }
                            },
                            "id": 2257,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rdata",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3219,
                            "src": "22173:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                              "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 2258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22173:13:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "22149:37:2"
                      },
                      {
                        "assignments": [
                          2263
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2263,
                            "mutability": "mutable",
                            "name": "dnskey",
                            "nodeType": "VariableDeclaration",
                            "scope": 2281,
                            "src": "22200:28:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                              "typeString": "struct RRUtils.DNSKEY"
                            },
                            "typeName": {
                              "id": 2262,
                              "name": "RRUtils.DNSKEY",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3240,
                              "src": "22200:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_storage_ptr",
                                "typeString": "struct RRUtils.DNSKEY"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2270,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 2266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22251:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "id": 2267,
                                "name": "keyrdata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2255,
                                "src": "22254:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2268,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "22254:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 2264,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2255,
                              "src": "22231:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "readDNSKEY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3299,
                            "src": "22231:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_struct$_DNSKEY_$3240_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (struct RRUtils.DNSKEY memory)"
                            }
                          },
                          "id": 2269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22231:39:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                            "typeString": "struct RRUtils.DNSKEY memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "22200:70:2"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 2272,
                              "name": "dnskey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2263,
                              "src": "22310:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              }
                            },
                            {
                              "id": 2273,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2255,
                              "src": "22318:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 2274,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "22328:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            {
                              "id": 2275,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2219,
                              "src": "22335:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            ],
                            "id": 2271,
                            "name": "verifySignatureWithKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2352,
                            "src": "22287:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_DNSKEY_$3240_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct RRUtils.DNSKEY memory,bytes memory,struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory) view returns (bool)"
                            }
                          },
                          "id": 2276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22287:53:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2280,
                        "nodeType": "IfStatement",
                        "src": "22284:102:2",
                        "trueBody": {
                          "id": 2279,
                          "nodeType": "Block",
                          "src": "22342:44:2",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 2277,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "22367:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 2225,
                              "id": 2278,
                              "nodeType": "Return",
                              "src": "22360:11:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "id": 2239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "22046:13:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2236,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2221,
                          "src": "22047:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2237,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "22047:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 2238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22047:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2282,
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2240,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2221,
                          "src": "22061:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2241,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "22061:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 2242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22061:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 2243,
                    "nodeType": "ExpressionStatement",
                    "src": "22061:12:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "22040:356:2"
                }
              ]
            },
            "documentation": {
              "id": 2215,
              "nodeType": "StructuredDocumentation",
              "src": "21390:348:2",
              "text": " @dev Attempts to verify a signed RRSET against an already known public key.\n @param rrset The signed set to verify.\n @param data The original data the signed set was read from.\n @param proof The serialized DS or DNSKEY record to use as proof.\n @return True if the RRSET could be verified, false otherwise."
            },
            "id": 2284,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyWithKnownKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2217,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2284,
                  "src": "21771:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2216,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "21771:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2219,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2284,
                  "src": "21803:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 2218,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "21803:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2221,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2284,
                  "src": "21835:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                    "typeString": "struct RRUtils.RRIterator"
                  },
                  "typeName": {
                    "id": 2220,
                    "name": "RRUtils.RRIterator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3030,
                    "src": "21835:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                      "typeString": "struct RRUtils.RRIterator"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21770:97:2"
            },
            "returnParameters": {
              "id": 2225,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2224,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2284,
                  "src": "21890:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2223,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21890:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21889:6:2"
            },
            "scope": 2629,
            "src": "21743:659:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2351,
              "nodeType": "Block",
              "src": "22951:990:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 2301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2298,
                        "name": "dnskey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2287,
                        "src": "23098:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                          "typeString": "struct RRUtils.DNSKEY memory"
                        }
                      },
                      "id": 2299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "protocol",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3235,
                      "src": "23098:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "33",
                      "id": 2300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23117:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "src": "23098:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2305,
                  "nodeType": "IfStatement",
                  "src": "23095:62:2",
                  "trueBody": {
                    "id": 2304,
                    "nodeType": "Block",
                    "src": "23120:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23141:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2297,
                        "id": 2303,
                        "nodeType": "Return",
                        "src": "23134:12:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 2310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2306,
                        "name": "dnskey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2287,
                        "src": "23371:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                          "typeString": "struct RRUtils.DNSKEY memory"
                        }
                      },
                      "id": 2307,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "algorithm",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3237,
                      "src": "23371:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2308,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2291,
                        "src": "23391:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 2309,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "algorithm",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2883,
                      "src": "23391:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "23371:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2314,
                  "nodeType": "IfStatement",
                  "src": "23368:77:2",
                  "trueBody": {
                    "id": 2313,
                    "nodeType": "Block",
                    "src": "23408:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2311,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23429:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2297,
                        "id": 2312,
                        "nodeType": "Return",
                        "src": "23422:12:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2316
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2316,
                      "mutability": "mutable",
                      "name": "computedkeytag",
                      "nodeType": "VariableDeclaration",
                      "scope": 2351,
                      "src": "23454:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 2315,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "23454:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2320,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2318,
                        "name": "keyrdata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "23492:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2317,
                      "name": "computeKeytag",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2628,
                      "src": "23478:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint16_$",
                        "typeString": "function (bytes memory) pure returns (uint16)"
                      }
                    },
                    "id": 2319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23478:23:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23454:47:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 2324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2321,
                      "name": "computedkeytag",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2316,
                      "src": "23515:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2322,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2291,
                        "src": "23533:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 2323,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keytag",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2893,
                      "src": "23533:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "23515:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2328,
                  "nodeType": "IfStatement",
                  "src": "23511:73:2",
                  "trueBody": {
                    "id": 2327,
                    "nodeType": "Block",
                    "src": "23547:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23568:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2297,
                        "id": 2326,
                        "nodeType": "Return",
                        "src": "23561:12:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2329,
                          "name": "dnskey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2287,
                          "src": "23772:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                            "typeString": "struct RRUtils.DNSKEY memory"
                          }
                        },
                        "id": 2330,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "flags",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3233,
                        "src": "23772:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "id": 2331,
                        "name": "DNSKEY_FLAG_ZONEKEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 873,
                        "src": "23787:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23772:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 2333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23810:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23772:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2338,
                  "nodeType": "IfStatement",
                  "src": "23768:82:2",
                  "trueBody": {
                    "id": 2337,
                    "nodeType": "Block",
                    "src": "23813:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23834:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2297,
                        "id": 2336,
                        "nodeType": "Return",
                        "src": "23827:12:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2344,
                        "name": "keyrdata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "23903:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 2345,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2293,
                          "src": "23913:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        "id": 2346,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 737,
                        "src": "23913:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 2347,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2293,
                          "src": "23925:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        "id": 2348,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sig",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 739,
                        "src": "23925:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 2339,
                          "name": "algorithms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 896,
                          "src": "23867:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Algorithm_$3863_$",
                            "typeString": "mapping(uint8 => contract Algorithm)"
                          }
                        },
                        "id": 2342,
                        "indexExpression": {
                          "expression": {
                            "id": 2340,
                            "name": "dnskey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2287,
                            "src": "23878:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                              "typeString": "struct RRUtils.DNSKEY memory"
                            }
                          },
                          "id": 2341,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "algorithm",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3237,
                          "src": "23878:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23867:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Algorithm_$3863",
                          "typeString": "contract Algorithm"
                        }
                      },
                      "id": 2343,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "verify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3862,
                      "src": "23867:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory,bytes memory) view external returns (bool)"
                      }
                    },
                    "id": 2349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23867:67:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2297,
                  "id": 2350,
                  "nodeType": "Return",
                  "src": "23860:74:2"
                }
              ]
            },
            "documentation": {
              "id": 2285,
              "nodeType": "StructuredDocumentation",
              "src": "22408:332:2",
              "text": " @dev Attempts to verify some data using a provided key and a signature.\n @param dnskey The dns key record to verify the signature with.\n @param rrset The signed RRSET being verified.\n @param data The original data `rrset` was decoded from.\n @return True iff the key verifies the signature."
            },
            "id": 2352,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifySignatureWithKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2287,
                  "mutability": "mutable",
                  "name": "dnskey",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22777:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                    "typeString": "struct RRUtils.DNSKEY"
                  },
                  "typeName": {
                    "id": 2286,
                    "name": "RRUtils.DNSKEY",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3240,
                    "src": "22777:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DNSKEY_$3240_storage_ptr",
                      "typeString": "struct RRUtils.DNSKEY"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2289,
                  "mutability": "mutable",
                  "name": "keyrdata",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22807:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "22807:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2291,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22830:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2290,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "22830:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2293,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22862:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 2292,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "22862:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22776:117:2"
            },
            "returnParameters": {
              "id": 2297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2296,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22941:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2295,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22941:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22940:6:2"
            },
            "scope": 2629,
            "src": "22745:1196:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2425,
              "nodeType": "Block",
              "src": "24492:551:2",
              "statements": [
                {
                  "body": {
                    "id": 2421,
                    "nodeType": "Block",
                    "src": "24579:436:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 2384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2381,
                                  "name": "iter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2367,
                                  "src": "24601:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2382,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "dnstype",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3021,
                                "src": "24601:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 2383,
                                "name": "DNSTYPE_DNSKEY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 867,
                                "src": "24617:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "24601:30:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2380,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "24593:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24593:39:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2386,
                        "nodeType": "ExpressionStatement",
                        "src": "24593:39:2"
                      },
                      {
                        "assignments": [
                          2388
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2388,
                            "mutability": "mutable",
                            "name": "keyrdata",
                            "nodeType": "VariableDeclaration",
                            "scope": 2421,
                            "src": "24646:21:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2387,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "24646:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2392,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 2389,
                              "name": "iter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2367,
                              "src": "24670:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              }
                            },
                            "id": 2390,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rdata",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3219,
                            "src": "24670:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                              "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 2391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24670:12:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24646:36:2"
                      },
                      {
                        "assignments": [
                          2396
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2396,
                            "mutability": "mutable",
                            "name": "dnskey",
                            "nodeType": "VariableDeclaration",
                            "scope": 2421,
                            "src": "24696:28:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                              "typeString": "struct RRUtils.DNSKEY"
                            },
                            "typeName": {
                              "id": 2395,
                              "name": "RRUtils.DNSKEY",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3240,
                              "src": "24696:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_storage_ptr",
                                "typeString": "struct RRUtils.DNSKEY"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2403,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 2399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "24747:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "id": 2400,
                                "name": "keyrdata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2388,
                                "src": "24750:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "24750:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 2397,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2388,
                              "src": "24727:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2398,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "readDNSKEY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3299,
                            "src": "24727:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_struct$_DNSKEY_$3240_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (struct RRUtils.DNSKEY memory)"
                            }
                          },
                          "id": 2402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24727:39:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                            "typeString": "struct RRUtils.DNSKEY memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24696:70:2"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 2405,
                              "name": "dnskey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2396,
                              "src": "24807:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              }
                            },
                            {
                              "id": 2406,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2388,
                              "src": "24815:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 2407,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2355,
                              "src": "24825:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            {
                              "id": 2408,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2357,
                              "src": "24832:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            ],
                            "id": 2404,
                            "name": "verifySignatureWithKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2352,
                            "src": "24784:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_DNSKEY_$3240_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct RRUtils.DNSKEY memory,bytes memory,struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory) view returns (bool)"
                            }
                          },
                          "id": 2409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24784:53:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2420,
                        "nodeType": "IfStatement",
                        "src": "24780:225:2",
                        "trueBody": {
                          "id": 2419,
                          "nodeType": "Block",
                          "src": "24839:166:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "id": 2411,
                                        "name": "iter",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2367,
                                        "src": "24953:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                          "typeString": "struct RRUtils.RRIterator memory"
                                        }
                                      },
                                      "id": 2412,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "name",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3198,
                                      "src": "24953:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                                        "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 2413,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "24953:11:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "id": 2414,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2359,
                                    "src": "24966:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                      "typeString": "struct RRUtils.RRIterator memory"
                                    }
                                  },
                                  {
                                    "id": 2415,
                                    "name": "dnskey",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2396,
                                    "src": "24973:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                      "typeString": "struct RRUtils.DNSKEY memory"
                                    }
                                  },
                                  {
                                    "id": 2416,
                                    "name": "keyrdata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2388,
                                    "src": "24981:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                      "typeString": "struct RRUtils.RRIterator memory"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                      "typeString": "struct RRUtils.DNSKEY memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 2410,
                                  "name": "verifyKeyWithDS",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2535,
                                  "src": "24937:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_struct$_RRIterator_$3030_memory_ptr_$_t_struct$_DNSKEY_$3240_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                                    "typeString": "function (bytes memory,struct RRUtils.RRIterator memory,struct RRUtils.DNSKEY memory,bytes memory) view returns (bool)"
                                  }
                                },
                                "id": 2417,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24937:53:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "functionReturnParameters": 2363,
                              "id": 2418,
                              "nodeType": "Return",
                              "src": "24930:60:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "id": 2375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "24552:12:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2372,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2367,
                          "src": "24553:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2373,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "24553:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 2374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24553:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2422,
                  "initializationExpression": {
                    "assignments": [
                      2367
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2367,
                        "mutability": "mutable",
                        "name": "iter",
                        "nodeType": "VariableDeclaration",
                        "scope": 2422,
                        "src": "24506:30:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        },
                        "typeName": {
                          "id": 2366,
                          "name": "RRUtils.RRIterator",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3030,
                          "src": "24506:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                            "typeString": "struct RRUtils.RRIterator"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2371,
                    "initialValue": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2368,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2355,
                          "src": "24539:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 2369,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3015,
                        "src": "24539:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.RRIterator memory)"
                        }
                      },
                      "id": 2370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24539:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator memory"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24506:44:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2376,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2367,
                          "src": "24566:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2377,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "24566:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 2378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24566:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 2379,
                    "nodeType": "ExpressionStatement",
                    "src": "24566:11:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "24502:513:2"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 2423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "25031:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 2363,
                  "id": 2424,
                  "nodeType": "Return",
                  "src": "25024:12:2"
                }
              ]
            },
            "documentation": {
              "id": 2353,
              "nodeType": "StructuredDocumentation",
              "src": "23947:393:2",
              "text": " @dev Attempts to verify a signed RRSET against an already known hash. This function assumes\n      that the record \n @param rrset The signed set to verify.\n @param data The original data the signed set was read from.\n @param proof The serialized DS or DNSKEY record to use as proof.\n @return True if the RRSET could be verified, false otherwise."
            },
            "id": 2426,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyWithDS",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2355,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2426,
                  "src": "24367:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2354,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "24367:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2357,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2426,
                  "src": "24399:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 2356,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "24399:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2359,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2426,
                  "src": "24431:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                    "typeString": "struct RRUtils.RRIterator"
                  },
                  "typeName": {
                    "id": 2358,
                    "name": "RRUtils.RRIterator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3030,
                    "src": "24431:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                      "typeString": "struct RRUtils.RRIterator"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24366:97:2"
            },
            "returnParameters": {
              "id": 2363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2362,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2426,
                  "src": "24486:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2361,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24486:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24485:6:2"
            },
            "scope": 2629,
            "src": "24345:698:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2534,
              "nodeType": "Block",
              "src": "25580:735:2",
              "statements": [
                {
                  "assignments": [
                    2441
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2441,
                      "mutability": "mutable",
                      "name": "keytag",
                      "nodeType": "VariableDeclaration",
                      "scope": 2534,
                      "src": "25590:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 2440,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "25590:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2445,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2443,
                        "name": "keyrdata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2435,
                        "src": "25620:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2442,
                      "name": "computeKeytag",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2628,
                      "src": "25606:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint16_$",
                        "typeString": "function (bytes memory) pure returns (uint16)"
                      }
                    },
                    "id": 2444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25606:23:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25590:39:2"
                },
                {
                  "body": {
                    "id": 2530,
                    "nodeType": "Block",
                    "src": "25675:612:2",
                    "statements": [
                      {
                        "assignments": [
                          2455
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2455,
                            "mutability": "mutable",
                            "name": "rdata",
                            "nodeType": "VariableDeclaration",
                            "scope": 2530,
                            "src": "25689:18:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2454,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "25689:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2459,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 2456,
                              "name": "dsrrs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2431,
                              "src": "25710:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              }
                            },
                            "id": 2457,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rdata",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3219,
                            "src": "25710:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                              "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 2458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25710:13:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25689:34:2"
                      },
                      {
                        "assignments": [
                          2463
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2463,
                            "mutability": "mutable",
                            "name": "ds",
                            "nodeType": "VariableDeclaration",
                            "scope": 2530,
                            "src": "25737:20:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                              "typeString": "struct RRUtils.DS"
                            },
                            "typeName": {
                              "id": 2462,
                              "name": "RRUtils.DS",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3320,
                              "src": "25737:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DS_$3320_storage_ptr",
                                "typeString": "struct RRUtils.DS"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2475,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2467,
                                "name": "dsrrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2431,
                                "src": "25778:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                  "typeString": "struct RRUtils.RRIterator memory"
                                }
                              },
                              "id": 2468,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rdataOffset",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3027,
                              "src": "25778:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2469,
                                  "name": "dsrrs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2431,
                                  "src": "25797:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2470,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "nextOffset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3029,
                                "src": "25797:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "expression": {
                                  "id": 2471,
                                  "name": "dsrrs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2431,
                                  "src": "25816:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2472,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rdataOffset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3027,
                                "src": "25816:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25797:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 2464,
                                "name": "dsrrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2431,
                                "src": "25760:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                  "typeString": "struct RRUtils.RRIterator memory"
                                }
                              },
                              "id": 2465,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3017,
                              "src": "25760:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2466,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "readDS",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3379,
                            "src": "25760:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_struct$_DS_$3320_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (struct RRUtils.DS memory)"
                            }
                          },
                          "id": 2474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25760:74:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                            "typeString": "struct RRUtils.DS memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25737:97:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "id": 2479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2476,
                              "name": "ds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2463,
                              "src": "25851:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                                "typeString": "struct RRUtils.DS memory"
                              }
                            },
                            "id": 2477,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "keytag",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3313,
                            "src": "25851:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 2478,
                            "name": "keytag",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2441,
                            "src": "25864:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "25851:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2482,
                        "nodeType": "IfStatement",
                        "src": "25848:65:2",
                        "trueBody": {
                          "id": 2481,
                          "nodeType": "Block",
                          "src": "25872:41:2",
                          "statements": [
                            {
                              "id": 2480,
                              "nodeType": "Continue",
                              "src": "25890:8:2"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 2487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2483,
                              "name": "ds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2463,
                              "src": "25930:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                                "typeString": "struct RRUtils.DS memory"
                              }
                            },
                            "id": 2484,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "algorithm",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3315,
                            "src": "25930:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "id": 2485,
                              "name": "dnskey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2433,
                              "src": "25946:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              }
                            },
                            "id": 2486,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "algorithm",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3237,
                            "src": "25946:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "25930:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2490,
                        "nodeType": "IfStatement",
                        "src": "25926:79:2",
                        "trueBody": {
                          "id": 2489,
                          "nodeType": "Block",
                          "src": "25964:41:2",
                          "statements": [
                            {
                              "id": 2488,
                              "nodeType": "Continue",
                              "src": "25982:8:2"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          2494
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2494,
                            "mutability": "mutable",
                            "name": "buf",
                            "nodeType": "VariableDeclaration",
                            "scope": 2530,
                            "src": "26019:24:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                              "typeString": "struct Buffer.buffer"
                            },
                            "typeName": {
                              "id": 2493,
                              "name": "Buffer.buffer",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5974,
                              "src": "26019:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$5974_storage_ptr",
                                "typeString": "struct Buffer.buffer"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2495,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "26019:24:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2499,
                                  "name": "keyname",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2429,
                                  "src": "26066:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2500,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "26066:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "expression": {
                                  "id": 2501,
                                  "name": "keyrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2435,
                                  "src": "26083:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2502,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "26083:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "26066:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 2496,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2494,
                              "src": "26057:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 2498,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "init",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6010,
                            "src": "26057:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$5974_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$5974_memory_ptr_$bound_to$_t_struct$_buffer_$5974_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,uint256) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 2504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26057:42:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 2505,
                        "nodeType": "ExpressionStatement",
                        "src": "26057:42:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2509,
                              "name": "keyname",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2429,
                              "src": "26124:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 2506,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2494,
                              "src": "26113:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 2508,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "append",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6216,
                            "src": "26113:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$5974_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$5974_memory_ptr_$bound_to$_t_struct$_buffer_$5974_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 2510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26113:19:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 2511,
                        "nodeType": "ExpressionStatement",
                        "src": "26113:19:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2515,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2435,
                              "src": "26157:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 2512,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2494,
                              "src": "26146:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 2514,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "append",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6216,
                            "src": "26146:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$5974_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$5974_memory_ptr_$bound_to$_t_struct$_buffer_$5974_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 2516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26146:20:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 2517,
                        "nodeType": "ExpressionStatement",
                        "src": "26146:20:2"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2519,
                                "name": "ds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2463,
                                "src": "26197:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                                  "typeString": "struct RRUtils.DS memory"
                                }
                              },
                              "id": 2520,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "digestType",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3317,
                              "src": "26197:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "expression": {
                                "id": 2521,
                                "name": "buf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2494,
                                "src": "26212:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                                  "typeString": "struct Buffer.buffer memory"
                                }
                              },
                              "id": 2522,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5971,
                              "src": "26212:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 2523,
                                "name": "ds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2463,
                                "src": "26221:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                                  "typeString": "struct RRUtils.DS memory"
                                }
                              },
                              "id": 2524,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "digest",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3319,
                              "src": "26221:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2518,
                            "name": "verifyDSHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2571,
                            "src": "26184:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint8_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint8,bytes memory,bytes memory) view returns (bool)"
                            }
                          },
                          "id": 2525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26184:47:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2529,
                        "nodeType": "IfStatement",
                        "src": "26180:97:2",
                        "trueBody": {
                          "id": 2528,
                          "nodeType": "Block",
                          "src": "26233:44:2",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 2526,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "26258:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 2439,
                              "id": 2527,
                              "nodeType": "Return",
                              "src": "26251:11:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "id": 2449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "25646:13:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2446,
                          "name": "dsrrs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2431,
                          "src": "25647:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2447,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "25647:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 2448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25647:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2531,
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2450,
                          "name": "dsrrs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2431,
                          "src": "25661:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2451,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "25661:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 2452,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25661:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 2453,
                    "nodeType": "ExpressionStatement",
                    "src": "25661:12:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "25639:648:2"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 2532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "26303:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 2439,
                  "id": 2533,
                  "nodeType": "Return",
                  "src": "26296:12:2"
                }
              ]
            },
            "documentation": {
              "id": 2427,
              "nodeType": "StructuredDocumentation",
              "src": "25049:352:2",
              "text": " @dev Attempts to verify a key using DS records.\n @param keyname The DNS name of the key, in DNS label-sequence format.\n @param dsrrs The DS records to use in verification.\n @param dnskey The dnskey to verify.\n @param keyrdata The RDATA section of the key.\n @return True if a DS record verifies this key."
            },
            "id": 2535,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyKeyWithDS",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2429,
                  "mutability": "mutable",
                  "name": "keyname",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25431:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2428,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "25431:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2431,
                  "mutability": "mutable",
                  "name": "dsrrs",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25453:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                    "typeString": "struct RRUtils.RRIterator"
                  },
                  "typeName": {
                    "id": 2430,
                    "name": "RRUtils.RRIterator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3030,
                    "src": "25453:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                      "typeString": "struct RRUtils.RRIterator"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2433,
                  "mutability": "mutable",
                  "name": "dnskey",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25486:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                    "typeString": "struct RRUtils.DNSKEY"
                  },
                  "typeName": {
                    "id": 2432,
                    "name": "RRUtils.DNSKEY",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3240,
                    "src": "25486:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DNSKEY_$3240_storage_ptr",
                      "typeString": "struct RRUtils.DNSKEY"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2435,
                  "mutability": "mutable",
                  "name": "keyrdata",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25516:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2434,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "25516:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25430:108:2"
            },
            "returnParameters": {
              "id": 2439,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2438,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25570:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2437,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25570:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25569:6:2"
            },
            "scope": 2629,
            "src": "25406:909:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2570,
              "nodeType": "Block",
              "src": "26718:158:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 2549,
                            "name": "digests",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 900,
                            "src": "26740:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
                              "typeString": "mapping(uint8 => contract Digest)"
                            }
                          },
                          "id": 2551,
                          "indexExpression": {
                            "id": 2550,
                            "name": "digesttype",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2538,
                            "src": "26748:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "26740:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Digest_$5741",
                            "typeString": "contract Digest"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Digest_$5741",
                            "typeString": "contract Digest"
                          }
                        ],
                        "id": 2548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "26732:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2547,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "26732:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26732:28:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 2555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26772:1:2",
                          "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": 2554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "26764:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2553,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "26764:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26764:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "26732:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2561,
                  "nodeType": "IfStatement",
                  "src": "26728:85:2",
                  "trueBody": {
                    "id": 2560,
                    "nodeType": "Block",
                    "src": "26776:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26797:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2546,
                        "id": 2559,
                        "nodeType": "Return",
                        "src": "26790:12:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2566,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2540,
                        "src": "26856:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 2567,
                        "name": "digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2542,
                        "src": "26862:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 2562,
                          "name": "digests",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 900,
                          "src": "26829:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
                            "typeString": "mapping(uint8 => contract Digest)"
                          }
                        },
                        "id": 2564,
                        "indexExpression": {
                          "id": 2563,
                          "name": "digesttype",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2538,
                          "src": "26837:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26829:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Digest_$5741",
                          "typeString": "contract Digest"
                        }
                      },
                      "id": 2565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "verify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5740,
                      "src": "26829:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory) pure external returns (bool)"
                      }
                    },
                    "id": 2568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26829:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2546,
                  "id": 2569,
                  "nodeType": "Return",
                  "src": "26822:47:2"
                }
              ]
            },
            "documentation": {
              "id": 2536,
              "nodeType": "StructuredDocumentation",
              "src": "26321:283:2",
              "text": " @dev Attempts to verify a DS record's hash value against some data.\n @param digesttype The digest ID from the DS record.\n @param data The data to digest.\n @param digest The digest data to check against.\n @return True iff the digest matches."
            },
            "id": 2571,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyDSHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2538,
                  "mutability": "mutable",
                  "name": "digesttype",
                  "nodeType": "VariableDeclaration",
                  "scope": 2571,
                  "src": "26631:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 2537,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "26631:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2540,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2571,
                  "src": "26649:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2539,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "26649:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2542,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 2571,
                  "src": "26668:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2541,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "26668:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26630:58:2"
            },
            "returnParameters": {
              "id": 2546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2545,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2571,
                  "src": "26712:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2544,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "26712:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26711:6:2"
            },
            "scope": 2629,
            "src": "26609:267:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2627,
              "nodeType": "Block",
              "src": "27114:206:2",
              "statements": [
                {
                  "assignments": [
                    2580
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2580,
                      "mutability": "mutable",
                      "name": "ac",
                      "nodeType": "VariableDeclaration",
                      "scope": 2627,
                      "src": "27124:7:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2579,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "27124:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2581,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27124:7:2"
                },
                {
                  "body": {
                    "id": 2615,
                    "nodeType": "Block",
                    "src": "27180:94:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 2613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2593,
                            "name": "ac",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2580,
                            "src": "27194:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2598,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2596,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2594,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2583,
                                  "src": "27200:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2595,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "27204:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "27200:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2597,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27209:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "27200:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "arguments": [
                                {
                                  "id": 2610,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2583,
                                  "src": "27261:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 2608,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2574,
                                  "src": "27246:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "readUint8",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 311,
                                "src": "27246:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                                }
                              },
                              "id": 2611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "27246:17:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "id": 2612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "27200:63:2",
                            "trueExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 2607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 2603,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2583,
                                        "src": "27235:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 2601,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2574,
                                        "src": "27220:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 2602,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "readUint8",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 311,
                                      "src": "27220:14:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                                        "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 2604,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "27220:17:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "id": 2600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "27213:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint16_$",
                                    "typeString": "type(uint16)"
                                  },
                                  "typeName": {
                                    "id": 2599,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "27213:6:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2605,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27213:25:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "hexValue": "38",
                                "id": 2606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27242:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "8"
                              },
                              "src": "27213:30:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "27194:69:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2614,
                        "nodeType": "ExpressionStatement",
                        "src": "27194:69:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2586,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2583,
                      "src": "27158:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2587,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2574,
                        "src": "27162:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "27162:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27158:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2616,
                  "initializationExpression": {
                    "assignments": [
                      2583
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2583,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2616,
                        "src": "27146:6:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2582,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "27146:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2585,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 2584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27155:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "27146:10:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 2591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "27175:3:2",
                      "subExpression": {
                        "id": 2590,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2583,
                        "src": "27175:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2592,
                    "nodeType": "ExpressionStatement",
                    "src": "27175:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "27141:133:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2624,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2619,
                          "name": "ac",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2580,
                          "src": "27297:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2620,
                                "name": "ac",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2580,
                                "src": "27303:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "3136",
                                "id": 2621,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27309:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "16"
                              },
                              "src": "27303:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 2623,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "27302:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "27297:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "27290:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint16_$",
                        "typeString": "type(uint16)"
                      },
                      "typeName": {
                        "id": 2617,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "27290:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 2625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27290:23:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 2578,
                  "id": 2626,
                  "nodeType": "Return",
                  "src": "27283:30:2"
                }
              ]
            },
            "documentation": {
              "id": 2572,
              "nodeType": "StructuredDocumentation",
              "src": "26882:154:2",
              "text": " @dev Computes the keytag for a chunk of data.\n @param data The data to compute a keytag for.\n @return The computed key tag."
            },
            "id": 2628,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeKeytag",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2574,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2628,
                  "src": "27064:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2573,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "27064:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27063:19:2"
            },
            "returnParameters": {
              "id": 2578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2577,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2628,
                  "src": "27106:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 2576,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "27106:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27105:8:2"
            },
            "scope": 2629,
            "src": "27041:279:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2630,
        "src": "442:26880:2"
      }
    ],
    "src": "0:27323:2"
  },
  "legacyAST": {
    "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/DNSSECImpl.sol",
    "exportedSymbols": {
      "Algorithm": [
        3863
      ],
      "Buffer": [
        6432
      ],
      "BytesUtils": [
        730
      ],
      "DNSSEC": [
        820
      ],
      "DNSSECImpl": [
        2629
      ],
      "Digest": [
        5741
      ],
      "NSEC3Digest": [
        5847
      ],
      "Owned": [
        2724
      ],
      "RRUtils": [
        3847
      ]
    },
    "id": 2630,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 822,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "id": 823,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "24:33:2"
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/Owned.sol",
        "file": "./Owned.sol",
        "id": 824,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 2725,
        "src": "59:21:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/BytesUtils.sol",
        "file": "./BytesUtils.sol",
        "id": 825,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 731,
        "src": "81:26:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/RRUtils.sol",
        "file": "./RRUtils.sol",
        "id": 826,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 3848,
        "src": "108:23:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/DNSSEC.sol",
        "file": "./DNSSEC.sol",
        "id": 827,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 821,
        "src": "132:22:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/Algorithm.sol",
        "file": "./algorithms/Algorithm.sol",
        "id": 828,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 3864,
        "src": "155:36:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/digests/Digest.sol",
        "file": "./digests/Digest.sol",
        "id": 829,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 5742,
        "src": "192:30:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/nsec3digests/NSEC3Digest.sol",
        "file": "./nsec3digests/NSEC3Digest.sol",
        "id": 830,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 5848,
        "src": "223:40:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/buffer/contracts/Buffer.sol",
        "file": "@ensdomains/buffer/contracts/Buffer.sol",
        "id": 831,
        "nodeType": "ImportDirective",
        "scope": 2630,
        "sourceUnit": 6433,
        "src": "264:49:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 832,
              "name": "DNSSEC",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 820,
              "src": "465:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DNSSEC_$820",
                "typeString": "contract DNSSEC"
              }
            },
            "id": 833,
            "nodeType": "InheritanceSpecifier",
            "src": "465:6:2"
          },
          {
            "baseName": {
              "id": 834,
              "name": "Owned",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2724,
              "src": "473:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Owned_$2724",
                "typeString": "contract Owned"
              }
            },
            "id": 835,
            "nodeType": "InheritanceSpecifier",
            "src": "473:5:2"
          }
        ],
        "contractDependencies": [
          820,
          2724
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 2629,
        "linearizedBaseContracts": [
          2629,
          2724,
          820
        ],
        "name": "DNSSECImpl",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 838,
            "libraryName": {
              "id": 836,
              "name": "Buffer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6432,
              "src": "491:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Buffer_$6432",
                "typeString": "library Buffer"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "485:31:2",
            "typeName": {
              "id": 837,
              "name": "Buffer.buffer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5974,
              "src": "502:13:2",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_buffer_$5974_storage_ptr",
                "typeString": "struct Buffer.buffer"
              }
            }
          },
          {
            "id": 841,
            "libraryName": {
              "id": 839,
              "name": "BytesUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 730,
              "src": "527:10:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesUtils_$730",
                "typeString": "library BytesUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "521:27:2",
            "typeName": {
              "id": 840,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "542:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 843,
            "libraryName": {
              "id": 842,
              "name": "RRUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3847,
              "src": "559:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RRUtils_$3847",
                "typeString": "library RRUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "553:20:2"
          },
          {
            "constant": true,
            "id": 846,
            "mutability": "constant",
            "name": "DNSCLASS_IN",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "579:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 844,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "579:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "31",
              "id": 845,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "609:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 849,
            "mutability": "constant",
            "name": "DNSTYPE_NS",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "617:30:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 847,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "617:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "32",
              "id": 848,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "646:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2_by_1",
                "typeString": "int_const 2"
              },
              "value": "2"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 852,
            "mutability": "constant",
            "name": "DNSTYPE_SOA",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "653:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 850,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "653:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "36",
              "id": 851,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "683:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_6_by_1",
                "typeString": "int_const 6"
              },
              "value": "6"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 855,
            "mutability": "constant",
            "name": "DNSTYPE_DNAME",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "690:34:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 853,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "690:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3339",
              "id": 854,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "722:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_39_by_1",
                "typeString": "int_const 39"
              },
              "value": "39"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 858,
            "mutability": "constant",
            "name": "DNSTYPE_DS",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "730:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 856,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "730:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3433",
              "id": 857,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "759:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_43_by_1",
                "typeString": "int_const 43"
              },
              "value": "43"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 861,
            "mutability": "constant",
            "name": "DNSTYPE_RRSIG",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "767:34:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 859,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "767:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3436",
              "id": 860,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "799:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_46_by_1",
                "typeString": "int_const 46"
              },
              "value": "46"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 864,
            "mutability": "constant",
            "name": "DNSTYPE_NSEC",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "807:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 862,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "807:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3437",
              "id": 863,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "838:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_47_by_1",
                "typeString": "int_const 47"
              },
              "value": "47"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 867,
            "mutability": "constant",
            "name": "DNSTYPE_DNSKEY",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "846:35:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 865,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "846:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3438",
              "id": 866,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "879:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_48_by_1",
                "typeString": "int_const 48"
              },
              "value": "48"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 870,
            "mutability": "constant",
            "name": "DNSTYPE_NSEC3",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "887:34:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 868,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "887:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "hexValue": "3530",
              "id": 869,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "919:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_50_by_1",
                "typeString": "int_const 50"
              },
              "value": "50"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 873,
            "mutability": "constant",
            "name": "DNSKEY_FLAG_ZONEKEY",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "928:41:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 871,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "928:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3078313030",
              "id": 872,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "964:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_256_by_1",
                "typeString": "int_const 256"
              },
              "value": "0x100"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 876,
            "mutability": "constant",
            "name": "ALGORITHM_RSASHA256",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "976:38:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 874,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "976:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "38",
              "id": 875,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1013:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_8_by_1",
                "typeString": "int_const 8"
              },
              "value": "8"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 879,
            "mutability": "constant",
            "name": "DIGEST_ALGORITHM_SHA256",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1021:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 877,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1021:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "32",
              "id": 878,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1062:1:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2_by_1",
                "typeString": "int_const 2"
              },
              "value": "2"
            },
            "visibility": "internal"
          },
          {
            "canonicalName": "DNSSECImpl.RRSet",
            "id": 886,
            "members": [
              {
                "constant": false,
                "id": 881,
                "mutability": "mutable",
                "name": "inception",
                "nodeType": "VariableDeclaration",
                "scope": 886,
                "src": "1093:16:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 880,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1093:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 883,
                "mutability": "mutable",
                "name": "inserted",
                "nodeType": "VariableDeclaration",
                "scope": 886,
                "src": "1119:15:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 882,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1119:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 885,
                "mutability": "mutable",
                "name": "hash",
                "nodeType": "VariableDeclaration",
                "scope": 886,
                "src": "1144:12:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes20",
                  "typeString": "bytes20"
                },
                "typeName": {
                  "id": 884,
                  "name": "bytes20",
                  "nodeType": "ElementaryTypeName",
                  "src": "1144:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "RRSet",
            "nodeType": "StructDefinition",
            "scope": 2629,
            "src": "1070:93:2",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 892,
            "mutability": "mutable",
            "name": "rrsets",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1198:52:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
              "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet))"
            },
            "typeName": {
              "id": 891,
              "keyType": {
                "id": 887,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1207:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1198:45:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet))"
              },
              "valueType": {
                "id": 890,
                "keyType": {
                  "id": 888,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1226:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "nodeType": "Mapping",
                "src": "1218:24:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                  "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet)"
                },
                "valueType": {
                  "id": 889,
                  "name": "RRSet",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 886,
                  "src": "1236:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                    "typeString": "struct DNSSECImpl.RRSet"
                  }
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "c327deef",
            "id": 896,
            "mutability": "mutable",
            "name": "algorithms",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1257:46:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Algorithm_$3863_$",
              "typeString": "mapping(uint8 => contract Algorithm)"
            },
            "typeName": {
              "id": 895,
              "keyType": {
                "id": 893,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1266:5:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1257:28:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Algorithm_$3863_$",
                "typeString": "mapping(uint8 => contract Algorithm)"
              },
              "valueType": {
                "id": 894,
                "name": "Algorithm",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3863,
                "src": "1275:9:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Algorithm_$3863",
                  "typeString": "contract Algorithm"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "73cc48a6",
            "id": 900,
            "mutability": "mutable",
            "name": "digests",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1309:40:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
              "typeString": "mapping(uint8 => contract Digest)"
            },
            "typeName": {
              "id": 899,
              "keyType": {
                "id": 897,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1318:5:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1309:25:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
                "typeString": "mapping(uint8 => contract Digest)"
              },
              "valueType": {
                "id": 898,
                "name": "Digest",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 5741,
                "src": "1327:6:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Digest_$5741",
                  "typeString": "contract Digest"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "bd7ed31a",
            "id": 904,
            "mutability": "mutable",
            "name": "nsec3Digests",
            "nodeType": "VariableDeclaration",
            "scope": 2629,
            "src": "1355:50:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_NSEC3Digest_$5847_$",
              "typeString": "mapping(uint8 => contract NSEC3Digest)"
            },
            "typeName": {
              "id": 903,
              "keyType": {
                "id": 901,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1364:5:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1355:30:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_NSEC3Digest_$5847_$",
                "typeString": "mapping(uint8 => contract NSEC3Digest)"
              },
              "valueType": {
                "id": 902,
                "name": "NSEC3Digest",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 5847,
                "src": "1373:11:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                  "typeString": "contract NSEC3Digest"
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 908,
            "name": "Test",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 906,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "t",
                  "nodeType": "VariableDeclaration",
                  "scope": 908,
                  "src": "1423:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 905,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1423:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1422:8:2"
            },
            "src": "1412:19:2"
          },
          {
            "anonymous": false,
            "id": 910,
            "name": "Marker",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 909,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1448:2:2"
            },
            "src": "1436:15:2"
          },
          {
            "body": {
              "id": 951,
              "nodeType": "Block",
              "src": "1617:395:2",
              "statements": [
                {
                  "expression": {
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 916,
                      "name": "anchors",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 735,
                      "src": "1746:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage",
                        "typeString": "bytes storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 917,
                      "name": "_anchors",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 913,
                      "src": "1756:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "1746:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage",
                      "typeString": "bytes storage ref"
                    }
                  },
                  "id": 919,
                  "nodeType": "ExpressionStatement",
                  "src": "1746:18:2"
                },
                {
                  "expression": {
                    "id": 944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 920,
                          "name": "rrsets",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 892,
                          "src": "1774:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                          }
                        },
                        "id": 925,
                        "indexExpression": {
                          "arguments": [
                            {
                              "hexValue": "00",
                              "id": 922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "hexString",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1791:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
                                "typeString": "literal_string hex\"00\""
                              },
                              "value": "\u0000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
                                "typeString": "literal_string hex\"00\""
                              }
                            ],
                            "id": 921,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "1781:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1781:18:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1774:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                          "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                        }
                      },
                      "id": 926,
                      "indexExpression": {
                        "id": 924,
                        "name": "DNSTYPE_DS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 858,
                        "src": "1801:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1774:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_storage",
                        "typeString": "struct DNSSECImpl.RRSet storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 930,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1853:1:2",
                              "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": 929,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1846:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint32_$",
                              "typeString": "type(uint32)"
                            },
                            "typeName": {
                              "id": 928,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "1846:6:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1846:9:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "expression": {
                                "id": 934,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "1886:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "1886:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 933,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1879:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint64_$",
                              "typeString": "type(uint64)"
                            },
                            "typeName": {
                              "id": 932,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "1879:6:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1879:23:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 940,
                                  "name": "anchors",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 735,
                                  "src": "1940:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage",
                                    "typeString": "bytes storage ref"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_storage",
                                    "typeString": "bytes storage ref"
                                  }
                                ],
                                "id": 939,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "1930:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 941,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1930:18:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1922:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes20_$",
                              "typeString": "type(bytes20)"
                            },
                            "typeName": {
                              "id": 937,
                              "name": "bytes20",
                              "nodeType": "ElementaryTypeName",
                              "src": "1922:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1922:27:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        ],
                        "id": 927,
                        "name": "RRSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 886,
                        "src": "1815:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_RRSet_$886_storage_ptr_$",
                          "typeString": "type(struct DNSSECImpl.RRSet storage pointer)"
                        }
                      },
                      "id": 943,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "inception",
                        "inserted",
                        "hash"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "1815:145:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_memory_ptr",
                        "typeString": "struct DNSSECImpl.RRSet memory"
                      }
                    },
                    "src": "1774:186:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSet_$886_storage",
                      "typeString": "struct DNSSECImpl.RRSet storage ref"
                    }
                  },
                  "id": 945,
                  "nodeType": "ExpressionStatement",
                  "src": "1774:186:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "hexValue": "00",
                        "id": 947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "hexString",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1988:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
                          "typeString": "literal_string hex\"00\""
                        },
                        "value": "\u0000"
                      },
                      {
                        "id": 948,
                        "name": "anchors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 735,
                        "src": "1997:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
                          "typeString": "literal_string hex\"00\""
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      ],
                      "id": 946,
                      "name": "RRSetUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 764,
                      "src": "1975:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,bytes memory)"
                      }
                    },
                    "id": 949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1975:30:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 950,
                  "nodeType": "EmitStatement",
                  "src": "1970:35:2"
                }
              ]
            },
            "documentation": {
              "id": 911,
              "nodeType": "StructuredDocumentation",
              "src": "1457:113:2",
              "text": " @dev Constructor.\n @param _anchors The binary format RR entries for the root DS records."
            },
            "id": 952,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 913,
                  "mutability": "mutable",
                  "name": "_anchors",
                  "nodeType": "VariableDeclaration",
                  "scope": 952,
                  "src": "1587:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 912,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1587:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1586:23:2"
            },
            "returnParameters": {
              "id": 915,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1617:0:2"
            },
            "scope": 2629,
            "src": "1575:437:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 976,
              "nodeType": "Block",
              "src": "2310:88:2",
              "statements": [
                {
                  "expression": {
                    "id": 966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 962,
                        "name": "algorithms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 896,
                        "src": "2320:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Algorithm_$3863_$",
                          "typeString": "mapping(uint8 => contract Algorithm)"
                        }
                      },
                      "id": 964,
                      "indexExpression": {
                        "id": 963,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 955,
                        "src": "2331:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2320:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Algorithm_$3863",
                        "typeString": "contract Algorithm"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 965,
                      "name": "algo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 957,
                      "src": "2337:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Algorithm_$3863",
                        "typeString": "contract Algorithm"
                      }
                    },
                    "src": "2320:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Algorithm_$3863",
                      "typeString": "contract Algorithm"
                    }
                  },
                  "id": 967,
                  "nodeType": "ExpressionStatement",
                  "src": "2320:21:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 969,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 955,
                        "src": "2373:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 972,
                            "name": "algo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 957,
                            "src": "2385:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Algorithm_$3863",
                              "typeString": "contract Algorithm"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Algorithm_$3863",
                              "typeString": "contract Algorithm"
                            }
                          ],
                          "id": 971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2377:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 970,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2377:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2377:13:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 968,
                      "name": "AlgorithmUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 746,
                      "src": "2356:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$returns$__$",
                        "typeString": "function (uint8,address)"
                      }
                    },
                    "id": 974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2356:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 975,
                  "nodeType": "EmitStatement",
                  "src": "2351:40:2"
                }
              ]
            },
            "documentation": {
              "id": 953,
              "nodeType": "StructuredDocumentation",
              "src": "2018:221:2",
              "text": " @dev Sets the contract address for a signature verification algorithm.\n      Callable only by the owner.\n @param id The algorithm ID\n @param algo The address of the algorithm contract."
            },
            "functionSelector": "020ed8d3",
            "id": 977,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 960,
                "modifierName": {
                  "id": 959,
                  "name": "owner_only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2702,
                  "src": "2299:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2299:10:2"
              }
            ],
            "name": "setAlgorithm",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 955,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "2266:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2266:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 957,
                  "mutability": "mutable",
                  "name": "algo",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "2276:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Algorithm_$3863",
                    "typeString": "contract Algorithm"
                  },
                  "typeName": {
                    "id": 956,
                    "name": "Algorithm",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3863,
                    "src": "2276:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Algorithm_$3863",
                      "typeString": "contract Algorithm"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2265:26:2"
            },
            "returnParameters": {
              "id": 961,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2310:0:2"
            },
            "scope": 2629,
            "src": "2244:154:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1001,
              "nodeType": "Block",
              "src": "2685:86:2",
              "statements": [
                {
                  "expression": {
                    "id": 991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 987,
                        "name": "digests",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 900,
                        "src": "2695:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
                          "typeString": "mapping(uint8 => contract Digest)"
                        }
                      },
                      "id": 989,
                      "indexExpression": {
                        "id": 988,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 980,
                        "src": "2703:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2695:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Digest_$5741",
                        "typeString": "contract Digest"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 990,
                      "name": "digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 982,
                      "src": "2709:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Digest_$5741",
                        "typeString": "contract Digest"
                      }
                    },
                    "src": "2695:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Digest_$5741",
                      "typeString": "contract Digest"
                    }
                  },
                  "id": 992,
                  "nodeType": "ExpressionStatement",
                  "src": "2695:20:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 994,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 980,
                        "src": "2744:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 997,
                            "name": "digest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 982,
                            "src": "2756:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Digest_$5741",
                              "typeString": "contract Digest"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Digest_$5741",
                              "typeString": "contract Digest"
                            }
                          ],
                          "id": 996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2748:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 995,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2748:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2748:15:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 993,
                      "name": "DigestUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 752,
                      "src": "2730:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$returns$__$",
                        "typeString": "function (uint8,address)"
                      }
                    },
                    "id": 999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2730:34:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1000,
                  "nodeType": "EmitStatement",
                  "src": "2725:39:2"
                }
              ]
            },
            "documentation": {
              "id": 978,
              "nodeType": "StructuredDocumentation",
              "src": "2404:214:2",
              "text": " @dev Sets the contract address for a digest verification algorithm.\n      Callable only by the owner.\n @param id The digest ID\n @param digest The address of the digest contract."
            },
            "functionSelector": "28e7677d",
            "id": 1002,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 985,
                "modifierName": {
                  "id": 984,
                  "name": "owner_only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2702,
                  "src": "2674:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2674:10:2"
              }
            ],
            "name": "setDigest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 980,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 1002,
                  "src": "2642:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 979,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2642:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 982,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1002,
                  "src": "2652:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Digest_$5741",
                    "typeString": "contract Digest"
                  },
                  "typeName": {
                    "id": 981,
                    "name": "Digest",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5741,
                    "src": "2652:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Digest_$5741",
                      "typeString": "contract Digest"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2641:25:2"
            },
            "returnParameters": {
              "id": 986,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2685:0:2"
            },
            "scope": 2629,
            "src": "2623:148:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1026,
              "nodeType": "Block",
              "src": "3062:96:2",
              "statements": [
                {
                  "expression": {
                    "id": 1016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1012,
                        "name": "nsec3Digests",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "3072:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_NSEC3Digest_$5847_$",
                          "typeString": "mapping(uint8 => contract NSEC3Digest)"
                        }
                      },
                      "id": 1014,
                      "indexExpression": {
                        "id": 1013,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1005,
                        "src": "3085:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3072:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                        "typeString": "contract NSEC3Digest"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1015,
                      "name": "digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1007,
                      "src": "3091:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                        "typeString": "contract NSEC3Digest"
                      }
                    },
                    "src": "3072:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                      "typeString": "contract NSEC3Digest"
                    }
                  },
                  "id": 1017,
                  "nodeType": "ExpressionStatement",
                  "src": "3072:25:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1019,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1005,
                        "src": "3131:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 1022,
                            "name": "digest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1007,
                            "src": "3143:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                              "typeString": "contract NSEC3Digest"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                              "typeString": "contract NSEC3Digest"
                            }
                          ],
                          "id": 1021,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3135:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1020,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3135:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1023,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3135:15:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1018,
                      "name": "NSEC3DigestUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 758,
                      "src": "3112:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$returns$__$",
                        "typeString": "function (uint8,address)"
                      }
                    },
                    "id": 1024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3112:39:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1025,
                  "nodeType": "EmitStatement",
                  "src": "3107:44:2"
                }
              ]
            },
            "documentation": {
              "id": 1003,
              "nodeType": "StructuredDocumentation",
              "src": "2777:208:2",
              "text": " @dev Sets the contract address for an NSEC3 digest algorithm.\n      Callable only by the owner.\n @param id The digest ID\n @param digest The address of the digest contract."
            },
            "functionSelector": "8438dc04",
            "id": 1027,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1010,
                "modifierName": {
                  "id": 1009,
                  "name": "owner_only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2702,
                  "src": "3051:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3051:10:2"
              }
            ],
            "name": "setNSEC3Digest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1005,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "3014:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1004,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3014:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1007,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "3024:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                    "typeString": "contract NSEC3Digest"
                  },
                  "typeName": {
                    "id": 1006,
                    "name": "NSEC3Digest",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5847,
                    "src": "3024:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                      "typeString": "contract NSEC3Digest"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3013:30:2"
            },
            "returnParameters": {
              "id": 1011,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3062:0:2"
            },
            "scope": 2629,
            "src": "2990:168:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              773
            ],
            "body": {
              "id": 1110,
              "nodeType": "Block",
              "src": "3596:478:2",
              "statements": [
                {
                  "assignments": [
                    1039
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1039,
                      "mutability": "mutable",
                      "name": "offset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1110,
                      "src": "3606:11:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1038,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3606:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1041,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 1040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3620:1:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3606:15:2"
                },
                {
                  "assignments": [
                    1043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1043,
                      "mutability": "mutable",
                      "name": "proof",
                      "nodeType": "VariableDeclaration",
                      "scope": 1110,
                      "src": "3631:18:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1042,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3631:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1045,
                  "initialValue": {
                    "id": 1044,
                    "name": "_proof",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1032,
                    "src": "3652:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3631:27:2"
                },
                {
                  "body": {
                    "id": 1106,
                    "nodeType": "Block",
                    "src": "3696:350:2",
                    "statements": [
                      {
                        "assignments": [
                          1051
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1051,
                            "mutability": "mutable",
                            "name": "input",
                            "nodeType": "VariableDeclaration",
                            "scope": 1106,
                            "src": "3710:31:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                              "typeString": "struct DNSSEC.RRSetWithSignature"
                            },
                            "typeName": {
                              "id": 1050,
                              "name": "RRSetWithSignature",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 740,
                              "src": "3710:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1052,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3710:31:2"
                      },
                      {
                        "expression": {
                          "id": 1066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1053,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1051,
                              "src": "3755:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            },
                            "id": 1055,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "rrset",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 737,
                            "src": "3755:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1060,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1058,
                                  "name": "offset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1039,
                                  "src": "3784:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 1059,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3793:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "3784:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 1063,
                                    "name": "offset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1039,
                                    "src": "3812:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1061,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1030,
                                    "src": "3796:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1062,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "readUint16",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 331,
                                  "src": "3796:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint16_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256) pure returns (uint16)"
                                  }
                                },
                                "id": 1064,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3796:23:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 1056,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1030,
                                "src": "3769:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "3769:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 1065,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3769:51:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "3755:65:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1067,
                        "nodeType": "ExpressionStatement",
                        "src": "3755:65:2"
                      },
                      {
                        "expression": {
                          "id": 1074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1068,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1039,
                            "src": "3834:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1073,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "expression": {
                                  "id": 1069,
                                  "name": "input",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1051,
                                  "src": "3844:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                    "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                  }
                                },
                                "id": 1070,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rrset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 737,
                                "src": "3844:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "3844:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 1072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3865:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "3844:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3834:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1075,
                        "nodeType": "ExpressionStatement",
                        "src": "3834:32:2"
                      },
                      {
                        "expression": {
                          "id": 1089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1076,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1051,
                              "src": "3880:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            },
                            "id": 1078,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "sig",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 739,
                            "src": "3880:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1083,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1081,
                                  "name": "offset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1039,
                                  "src": "3907:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 1082,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3916:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "3907:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 1086,
                                    "name": "offset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1039,
                                    "src": "3935:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1084,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1030,
                                    "src": "3919:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1085,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "readUint16",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 331,
                                  "src": "3919:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint16_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256) pure returns (uint16)"
                                  }
                                },
                                "id": 1087,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3919:23:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 1079,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1030,
                                "src": "3892:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "3892:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 1088,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3892:51:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "3880:63:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1090,
                        "nodeType": "ExpressionStatement",
                        "src": "3880:63:2"
                      },
                      {
                        "expression": {
                          "id": 1097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1091,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1039,
                            "src": "3957:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "expression": {
                                  "id": 1092,
                                  "name": "input",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1051,
                                  "src": "3967:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                    "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                  }
                                },
                                "id": 1093,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sig",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 739,
                                "src": "3967:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1094,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "3967:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 1095,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3986:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "3967:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3957:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1098,
                        "nodeType": "ExpressionStatement",
                        "src": "3957:30:2"
                      },
                      {
                        "expression": {
                          "id": 1104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1099,
                            "name": "proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1043,
                            "src": "4001:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 1101,
                                "name": "input",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1051,
                                "src": "4022:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                  "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                }
                              },
                              {
                                "id": 1102,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1043,
                                "src": "4029:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                  "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1100,
                              "name": "_submitRRSet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1933,
                              "src": "4009:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) returns (bytes memory)"
                              }
                            },
                            "id": 1103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4009:26:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "4001:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1105,
                        "nodeType": "ExpressionStatement",
                        "src": "4001:34:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1046,
                      "name": "offset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1039,
                      "src": "3674:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1047,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1030,
                        "src": "3683:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1048,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "3683:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3674:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1107,
                  "nodeType": "WhileStatement",
                  "src": "3668:378:2"
                },
                {
                  "expression": {
                    "id": 1108,
                    "name": "proof",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1043,
                    "src": "4062:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1037,
                  "id": 1109,
                  "nodeType": "Return",
                  "src": "4055:12:2"
                }
              ]
            },
            "documentation": {
              "id": 1028,
              "nodeType": "StructuredDocumentation",
              "src": "3164:326:2",
              "text": " @dev Submits multiple RRSets\n @param data The data to submit, as a series of chunks. Each chunk is\n        in the format <uint16 length><bytes input><uint16 length><bytes sig>\n @param _proof The DNSKEY or DS to validate the first signature against.\n @return The last RRSET submitted."
            },
            "functionSelector": "76a14d1d",
            "id": 1111,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "submitRRSets",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1034,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3564:8:2"
            },
            "parameters": {
              "id": 1033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1030,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1111,
                  "src": "3517:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1029,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3517:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1032,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1111,
                  "src": "3536:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1031,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3536:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3516:40:2"
            },
            "returnParameters": {
              "id": 1037,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1036,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1111,
                  "src": "3582:12:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1035,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3582:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3581:14:2"
            },
            "scope": 2629,
            "src": "3495:579:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              782
            ],
            "body": {
              "id": 1127,
              "nodeType": "Block",
              "src": "4927:50:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1123,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1114,
                        "src": "4957:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        }
                      },
                      {
                        "id": 1124,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1116,
                        "src": "4964:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1122,
                      "name": "_submitRRSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1933,
                      "src": "4944:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) returns (bytes memory)"
                      }
                    },
                    "id": 1125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4944:26:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1121,
                  "id": 1126,
                  "nodeType": "Return",
                  "src": "4937:33:2"
                }
              ]
            },
            "documentation": {
              "id": 1112,
              "nodeType": "StructuredDocumentation",
              "src": "4080:709:2",
              "text": " @dev Submits a signed set of RRs to the oracle.\n RRSETs are only accepted if they are signed with a key that is already\n trusted, or if they are self-signed, and the signing key is identified by\n a DS record that is already trusted.\n @param input The signed RR set. This is in the format described in section\n        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n        data, followed by a series of canonicalised RR records that the signature\n        applies to.\n @param proof The DNSKEY or DS to validate the signature against. Must Already\n        have been submitted and proved previously."
            },
            "functionSelector": "d7b82ebe",
            "id": 1128,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "submitRRSet",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1118,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4883:8:2"
            },
            "parameters": {
              "id": 1117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1114,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 1128,
                  "src": "4815:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1113,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "4815:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1116,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1128,
                  "src": "4848:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1115,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4848:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4814:53:2"
            },
            "returnParameters": {
              "id": 1121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1120,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1128,
                  "src": "4909:12:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1119,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4909:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4908:14:2"
            },
            "scope": 2629,
            "src": "4794:183:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              793
            ],
            "body": {
              "id": 1218,
              "nodeType": "Block",
              "src": "5587:1383:2",
              "statements": [
                {
                  "assignments": [
                    1144
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1144,
                      "mutability": "mutable",
                      "name": "rrset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1218,
                      "src": "5597:30:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet"
                      },
                      "typeName": {
                        "id": 1143,
                        "name": "RRUtils.SignedSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2900,
                        "src": "5597:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                          "typeString": "struct RRUtils.SignedSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1145,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5597:30:2"
                },
                {
                  "expression": {
                    "id": 1151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1146,
                      "name": "rrset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1144,
                      "src": "5637:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1148,
                          "name": "nsec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1135,
                          "src": "5663:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        {
                          "id": 1149,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1137,
                          "src": "5669:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1147,
                        "name": "validateSignedSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2018,
                        "src": "5645:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) view returns (struct RRUtils.SignedSet memory)"
                        }
                      },
                      "id": 1150,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5645:30:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "src": "5637:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "id": 1152,
                  "nodeType": "ExpressionStatement",
                  "src": "5637:38:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 1157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 1154,
                            "name": "rrset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1144,
                            "src": "5693:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1155,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "typeCovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "5693:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1156,
                          "name": "DNSTYPE_NSEC",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 864,
                          "src": "5714:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "5693:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1153,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5685:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5685:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1159,
                  "nodeType": "ExpressionStatement",
                  "src": "5685:42:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "id": 1176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "id": 1173,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1163,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1144,
                                  "src": "5819:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 1164,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "inception",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2891,
                                "src": "5819:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 1165,
                                      "name": "rrsets",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 892,
                                      "src": "5837:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                        "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                                      }
                                    },
                                    "id": 1169,
                                    "indexExpression": {
                                      "arguments": [
                                        {
                                          "id": 1167,
                                          "name": "deleteName",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1133,
                                          "src": "5854:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "id": 1166,
                                        "name": "keccak256",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -8,
                                        "src": "5844:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                          "typeString": "function (bytes memory) pure returns (bytes32)"
                                        }
                                      },
                                      "id": 1168,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5844:21:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5837:29:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                                      "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                                    }
                                  },
                                  "id": 1171,
                                  "indexExpression": {
                                    "id": 1170,
                                    "name": "deleteType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1131,
                                    "src": "5867:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5837:41:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRSet_$886_storage",
                                    "typeString": "struct DNSSECImpl.RRSet storage ref"
                                  }
                                },
                                "id": 1172,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "inception",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 881,
                                "src": "5837:51:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "src": "5819:69:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 1162,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5813:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int32_$",
                              "typeString": "type(int32)"
                            },
                            "typeName": {
                              "id": 1161,
                              "name": "int32",
                              "nodeType": "ElementaryTypeName",
                              "src": "5813:5:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5813:76:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5893:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5813:81:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1160,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5805:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5805:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1178,
                  "nodeType": "ExpressionStatement",
                  "src": "5805:90:2"
                },
                {
                  "body": {
                    "id": 1213,
                    "nodeType": "Block",
                    "src": "5984:918:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1196,
                              "name": "iter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1182,
                              "src": "6768:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 1197,
                                "name": "rrset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1144,
                                "src": "6774:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                  "typeString": "struct RRUtils.SignedSet memory"
                                }
                              },
                              "id": 1198,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "name",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2899,
                              "src": "6774:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1199,
                              "name": "deleteName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1133,
                              "src": "6786:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1200,
                              "name": "deleteType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1131,
                              "src": "6798:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "id": 1195,
                            "name": "checkNsecName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1315,
                            "src": "6754:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint16_$returns$__$",
                              "typeString": "function (struct RRUtils.RRIterator memory,bytes memory,bytes memory,uint16) pure"
                            }
                          },
                          "id": 1201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6754:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1202,
                        "nodeType": "ExpressionStatement",
                        "src": "6754:55:2"
                      },
                      {
                        "expression": {
                          "id": 1210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "6823:48:2",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1203,
                                "name": "rrsets",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 892,
                                "src": "6830:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                  "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                                }
                              },
                              "id": 1207,
                              "indexExpression": {
                                "arguments": [
                                  {
                                    "id": 1205,
                                    "name": "deleteName",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1133,
                                    "src": "6847:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 1204,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "6837:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 1206,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6837:21:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6830:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                                "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                              }
                            },
                            "id": 1209,
                            "indexExpression": {
                              "id": 1208,
                              "name": "deleteType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1131,
                              "src": "6860:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6830:41:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRSet_$886_storage",
                              "typeString": "struct DNSSECImpl.RRSet storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1211,
                        "nodeType": "ExpressionStatement",
                        "src": "6823:48:2"
                      },
                      {
                        "functionReturnParameters": 1140,
                        "id": 1212,
                        "nodeType": "Return",
                        "src": "6885:7:2"
                      }
                    ]
                  },
                  "condition": {
                    "id": 1190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5957:12:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 1187,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1182,
                          "src": "5958:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1188,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "5958:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 1189,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5958:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1214,
                  "initializationExpression": {
                    "assignments": [
                      1182
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1182,
                        "mutability": "mutable",
                        "name": "iter",
                        "nodeType": "VariableDeclaration",
                        "scope": 1214,
                        "src": "5911:30:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        },
                        "typeName": {
                          "id": 1181,
                          "name": "RRUtils.RRIterator",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3030,
                          "src": "5911:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                            "typeString": "struct RRUtils.RRIterator"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1186,
                    "initialValue": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 1183,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1144,
                          "src": "5944:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1184,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3015,
                        "src": "5944:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.RRIterator memory)"
                        }
                      },
                      "id": 1185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5944:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator memory"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5911:44:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 1191,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1182,
                          "src": "5971:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1192,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "5971:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 1193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5971:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 1194,
                    "nodeType": "ExpressionStatement",
                    "src": "5971:11:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "5906:996:2"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1215,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "6955:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6955:8:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1217,
                  "nodeType": "ExpressionStatement",
                  "src": "6955:8:2"
                }
              ]
            },
            "documentation": {
              "id": 1129,
              "nodeType": "StructuredDocumentation",
              "src": "4983:454:2",
              "text": " @dev Deletes an RR from the oracle.\n @param deleteType The DNS record type to delete.\n @param deleteName which you want to delete\n @param nsec The signed NSEC RRset. This is in the format described in section\n        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n        data, followed by a series of canonicalised RR records that the signature\n        applies to."
            },
            "functionSelector": "2c095cbb",
            "id": 1219,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deleteRRSet",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1139,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5574:8:2"
            },
            "parameters": {
              "id": 1138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1131,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1219,
                  "src": "5463:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1130,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5463:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1133,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1219,
                  "src": "5482:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1132,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5482:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1135,
                  "mutability": "mutable",
                  "name": "nsec",
                  "nodeType": "VariableDeclaration",
                  "scope": 1219,
                  "src": "5507:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1134,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "5507:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1137,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1219,
                  "src": "5539:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1136,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5539:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5462:96:2"
            },
            "returnParameters": {
              "id": 1140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5587:0:2"
            },
            "scope": 2629,
            "src": "5442:1528:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1314,
              "nodeType": "Block",
              "src": "7111:1040:2",
              "statements": [
                {
                  "assignments": [
                    1231
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1231,
                      "mutability": "mutable",
                      "name": "rdataOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1314,
                      "src": "7121:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1230,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7121:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1234,
                  "initialValue": {
                    "expression": {
                      "id": 1232,
                      "name": "iter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1221,
                      "src": "7140:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator memory"
                      }
                    },
                    "id": 1233,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "rdataOffset",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3027,
                    "src": "7140:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7121:35:2"
                },
                {
                  "assignments": [
                    1236
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1236,
                      "mutability": "mutable",
                      "name": "nextNameLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 1314,
                      "src": "7166:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1235,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7166:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1242,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1240,
                        "name": "rdataOffset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1231,
                        "src": "7209:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "expression": {
                          "id": 1237,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1221,
                          "src": "7188:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1238,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3017,
                        "src": "7188:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nameLength",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2781,
                      "src": "7188:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7188:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7166:55:2"
                },
                {
                  "assignments": [
                    1244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1244,
                      "mutability": "mutable",
                      "name": "rDataLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 1314,
                      "src": "7231:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1243,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7231:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1250,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1245,
                        "name": "iter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1221,
                        "src": "7250:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator memory"
                        }
                      },
                      "id": 1246,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nextOffset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3029,
                      "src": "7250:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 1247,
                        "name": "iter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1221,
                        "src": "7268:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator memory"
                        }
                      },
                      "id": 1248,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rdataOffset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3027,
                      "src": "7268:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7250:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7231:53:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1252,
                          "name": "rDataLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1244,
                          "src": "7385:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "id": 1253,
                          "name": "nextNameLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1236,
                          "src": "7399:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7385:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1251,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7377:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7377:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1256,
                  "nodeType": "ExpressionStatement",
                  "src": "7377:37:2"
                },
                {
                  "assignments": [
                    1258
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1258,
                      "mutability": "mutable",
                      "name": "compareResult",
                      "nodeType": "VariableDeclaration",
                      "scope": 1314,
                      "src": "7425:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 1257,
                        "name": "int",
                        "nodeType": "ElementaryTypeName",
                        "src": "7425:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1263,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1261,
                        "name": "nsecName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1223,
                        "src": "7469:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1259,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1225,
                        "src": "7445:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "compareNames",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3827,
                      "src": "7445:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_int256_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,bytes memory) pure returns (int256)"
                      }
                    },
                    "id": 1262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7445:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7425:53:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1264,
                      "name": "compareResult",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1258,
                      "src": "7491:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1265,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7508:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7491:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1312,
                    "nodeType": "Block",
                    "src": "7689:456:2",
                    "statements": [
                      {
                        "assignments": [
                          1281
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1281,
                            "mutability": "mutable",
                            "name": "nextName",
                            "nodeType": "VariableDeclaration",
                            "scope": 1312,
                            "src": "7779:21:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1280,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "7779:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1288,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1285,
                              "name": "rdataOffset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1231,
                              "src": "7823:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1286,
                              "name": "nextNameLength",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1236,
                              "src": "7835:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 1282,
                                "name": "iter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1221,
                                "src": "7803:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                  "typeString": "struct RRUtils.RRIterator memory"
                                }
                              },
                              "id": 1283,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3017,
                              "src": "7803:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1284,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "substring",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 502,
                            "src": "7803:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                            }
                          },
                          "id": 1287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7803:47:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7779:71:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 1292,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1290,
                                "name": "compareResult",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1258,
                                "src": "7923:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1291,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7939:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7923:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1289,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7915:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7915:26:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1294,
                        "nodeType": "ExpressionStatement",
                        "src": "7915:26:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 1297,
                                "name": "nextName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1281,
                                "src": "7980:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 1295,
                                "name": "nsecName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1223,
                                "src": "7958:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "compareNames",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3827,
                              "src": "7958:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_int256_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,bytes memory) pure returns (int256)"
                              }
                            },
                            "id": 1298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7958:31:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1299,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7992:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7958:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1311,
                        "nodeType": "IfStatement",
                        "src": "7955:180:2",
                        "trueBody": {
                          "id": 1310,
                          "nodeType": "Block",
                          "src": "7995:140:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 1307,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 1304,
                                          "name": "nextName",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1281,
                                          "src": "8106:8:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1302,
                                          "name": "deleteName",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1225,
                                          "src": "8082:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 1303,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "compareNames",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3827,
                                        "src": "8082:23:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_int256_$bound_to$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes memory,bytes memory) pure returns (int256)"
                                        }
                                      },
                                      "id": 1305,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8082:33:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 1306,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8118:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "8082:37:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 1301,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "8074:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 1308,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8074:46:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1309,
                              "nodeType": "ExpressionStatement",
                              "src": "8074:46:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 1313,
                  "nodeType": "IfStatement",
                  "src": "7488:657:2",
                  "trueBody": {
                    "id": 1279,
                    "nodeType": "Block",
                    "src": "7511:172:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "7603:68:2",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1273,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1271,
                                      "name": "rdataOffset",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1231,
                                      "src": "7630:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 1272,
                                      "name": "nextNameLength",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1236,
                                      "src": "7644:14:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "7630:28:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 1274,
                                    "name": "deleteType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1227,
                                    "src": "7660:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "expression": {
                                    "expression": {
                                      "id": 1268,
                                      "name": "iter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1221,
                                      "src": "7604:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                        "typeString": "struct RRUtils.RRIterator memory"
                                      }
                                    },
                                    "id": 1269,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "data",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3017,
                                    "src": "7604:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1270,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "checkTypeBitmap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3672,
                                  "src": "7604:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint16_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256,uint16) pure returns (bool)"
                                  }
                                },
                                "id": 1275,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7604:67:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1267,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7595:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7595:77:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1278,
                        "nodeType": "ExpressionStatement",
                        "src": "7595:77:2"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 1315,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkNsecName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1221,
                  "mutability": "mutable",
                  "name": "iter",
                  "nodeType": "VariableDeclaration",
                  "scope": 1315,
                  "src": "6999:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                    "typeString": "struct RRUtils.RRIterator"
                  },
                  "typeName": {
                    "id": 1220,
                    "name": "RRUtils.RRIterator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3030,
                    "src": "6999:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                      "typeString": "struct RRUtils.RRIterator"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1223,
                  "mutability": "mutable",
                  "name": "nsecName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1315,
                  "src": "7031:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1222,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7031:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1225,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1315,
                  "src": "7054:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1224,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7054:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1227,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1315,
                  "src": "7079:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1226,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "7079:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6998:99:2"
            },
            "returnParameters": {
              "id": 1229,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7111:0:2"
            },
            "scope": 2629,
            "src": "6976:1175:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              806
            ],
            "body": {
              "id": 1466,
              "nodeType": "Block",
              "src": "9915:1457:2",
              "statements": [
                {
                  "assignments": [
                    1331
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1331,
                      "mutability": "mutable",
                      "name": "originalInception",
                      "nodeType": "VariableDeclaration",
                      "scope": 1466,
                      "src": "9925:23:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int32",
                        "typeString": "int32"
                      },
                      "typeName": {
                        "id": 1330,
                        "name": "int32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9925:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1343,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 1334,
                              "name": "rrsets",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 892,
                              "src": "9957:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                              }
                            },
                            "id": 1338,
                            "indexExpression": {
                              "arguments": [
                                {
                                  "id": 1336,
                                  "name": "deleteName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1320,
                                  "src": "9974:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 1335,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "9964:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 1337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9964:21:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9957:29:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                              "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                            }
                          },
                          "id": 1340,
                          "indexExpression": {
                            "id": 1339,
                            "name": "deleteType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1318,
                            "src": "9987:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9957:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSet_$886_storage",
                            "typeString": "struct DNSSECImpl.RRSet storage ref"
                          }
                        },
                        "id": 1341,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "inception",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 881,
                        "src": "9957:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 1333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "9951:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_int32_$",
                        "typeString": "type(int32)"
                      },
                      "typeName": {
                        "id": 1332,
                        "name": "int32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9951:5:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9951:58:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int32",
                      "typeString": "int32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9925:84:2"
                },
                {
                  "assignments": [
                    1347
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1347,
                      "mutability": "mutable",
                      "name": "ce",
                      "nodeType": "VariableDeclaration",
                      "scope": 1466,
                      "src": "10020:27:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet"
                      },
                      "typeName": {
                        "id": 1346,
                        "name": "RRUtils.SignedSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2900,
                        "src": "10020:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                          "typeString": "struct RRUtils.SignedSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1352,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1349,
                        "name": "closestEncloser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1322,
                        "src": "10068:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        }
                      },
                      {
                        "id": 1350,
                        "name": "dnskey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1326,
                        "src": "10085:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1348,
                      "name": "validateSignedSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2018,
                      "src": "10050:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$",
                        "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) view returns (struct RRUtils.SignedSet memory)"
                      }
                    },
                    "id": 1351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10050:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10020:72:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1354,
                        "name": "ce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1347,
                        "src": "10121:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      {
                        "id": 1355,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1320,
                        "src": "10125:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1356,
                        "name": "originalInception",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1331,
                        "src": "10137:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        }
                      ],
                      "id": 1353,
                      "name": "checkNSEC3Validity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1504,
                      "src": "10102:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$_t_bytes_memory_ptr_$_t_int32_$returns$__$",
                        "typeString": "function (struct RRUtils.SignedSet memory,bytes memory,int32) pure"
                      }
                    },
                    "id": 1357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10102:53:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1358,
                  "nodeType": "ExpressionStatement",
                  "src": "10102:53:2"
                },
                {
                  "assignments": [
                    1362
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1362,
                      "mutability": "mutable",
                      "name": "nc",
                      "nodeType": "VariableDeclaration",
                      "scope": 1466,
                      "src": "10166:27:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet"
                      },
                      "typeName": {
                        "id": 1361,
                        "name": "RRUtils.SignedSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2900,
                        "src": "10166:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                          "typeString": "struct RRUtils.SignedSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1363,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10166:27:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 1364,
                          "name": "nextClosest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1324,
                          "src": "10206:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        "id": 1365,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 737,
                        "src": "10206:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10206:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1367,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10233:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10206:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1383,
                  "nodeType": "IfStatement",
                  "src": "10203:168:2",
                  "trueBody": {
                    "id": 1382,
                    "nodeType": "Block",
                    "src": "10236:135:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1369,
                            "name": "nc",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1362,
                            "src": "10250:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 1371,
                                "name": "nextClosest",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1324,
                                "src": "10273:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                  "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                }
                              },
                              {
                                "id": 1372,
                                "name": "dnskey",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1326,
                                "src": "10286:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                  "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1370,
                              "name": "validateSignedSet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2018,
                              "src": "10255:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$",
                                "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) view returns (struct RRUtils.SignedSet memory)"
                              }
                            },
                            "id": 1373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10255:38:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "src": "10250:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1375,
                        "nodeType": "ExpressionStatement",
                        "src": "10250:43:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1377,
                              "name": "nc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1362,
                              "src": "10326:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            {
                              "id": 1378,
                              "name": "deleteName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1320,
                              "src": "10330:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1379,
                              "name": "originalInception",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1331,
                              "src": "10342:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int32",
                                "typeString": "int32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_int32",
                                "typeString": "int32"
                              }
                            ],
                            "id": 1376,
                            "name": "checkNSEC3Validity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1504,
                            "src": "10307:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$_t_bytes_memory_ptr_$_t_int32_$returns$__$",
                              "typeString": "function (struct RRUtils.SignedSet memory,bytes memory,int32) pure"
                            }
                          },
                          "id": 1380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10307:53:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1381,
                        "nodeType": "ExpressionStatement",
                        "src": "10307:53:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1387
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1387,
                      "mutability": "mutable",
                      "name": "ceNSEC3",
                      "nodeType": "VariableDeclaration",
                      "scope": 1466,
                      "src": "10381:28:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                        "typeString": "struct RRUtils.NSEC3"
                      },
                      "typeName": {
                        "id": 1386,
                        "name": "RRUtils.NSEC3",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3392,
                        "src": "10381:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                          "typeString": "struct RRUtils.NSEC3"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1391,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1389,
                        "name": "ce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1347,
                        "src": "10422:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      ],
                      "id": 1388,
                      "name": "readNSEC3",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1688,
                      "src": "10412:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_NSEC3_$3392_memory_ptr_$",
                        "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.NSEC3 memory)"
                      }
                    },
                    "id": 1390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10412:13:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                      "typeString": "struct RRUtils.NSEC3 memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10381:44:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 1398,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 1396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1393,
                              "name": "ceNSEC3",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1387,
                              "src": "10508:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                "typeString": "struct RRUtils.NSEC3 memory"
                              }
                            },
                            "id": 1394,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "flags",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3383,
                            "src": "10508:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "hexValue": "30786665",
                            "id": 1395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10524:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_254_by_1",
                              "typeString": "int_const 254"
                            },
                            "value": "0xfe"
                          },
                          "src": "10508:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1397,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10532:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "10508:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1392,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10500:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10500:34:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1400,
                  "nodeType": "ExpressionStatement",
                  "src": "10500:34:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "10754:39:2",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 1404,
                                "name": "DNSTYPE_DNAME",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 855,
                                "src": "10779:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 1402,
                                "name": "ceNSEC3",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1387,
                                "src": "10755:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                  "typeString": "struct RRUtils.NSEC3 memory"
                                }
                              },
                              "id": 1403,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "checkTypeBitmap",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3547,
                              "src": "10755:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_NSEC3_$3392_memory_ptr_$_t_uint16_$returns$_t_bool_$bound_to$_t_struct$_NSEC3_$3392_memory_ptr_$",
                                "typeString": "function (struct RRUtils.NSEC3 memory,uint16) pure returns (bool)"
                              }
                            },
                            "id": 1405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10755:38:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1416,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "!",
                                "prefix": true,
                                "src": "10798:36:2",
                                "subExpression": {
                                  "arguments": [
                                    {
                                      "id": 1409,
                                      "name": "DNSTYPE_NS",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 849,
                                      "src": "10823:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    ],
                                    "expression": {
                                      "id": 1407,
                                      "name": "ceNSEC3",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1387,
                                      "src": "10799:7:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                        "typeString": "struct RRUtils.NSEC3 memory"
                                      }
                                    },
                                    "id": 1408,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "checkTypeBitmap",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3547,
                                    "src": "10799:23:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_NSEC3_$3392_memory_ptr_$_t_uint16_$returns$_t_bool_$bound_to$_t_struct$_NSEC3_$3392_memory_ptr_$",
                                      "typeString": "function (struct RRUtils.NSEC3 memory,uint16) pure returns (bool)"
                                    }
                                  },
                                  "id": 1410,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10799:35:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "id": 1414,
                                    "name": "DNSTYPE_SOA",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 852,
                                    "src": "10862:11:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1412,
                                    "name": "ceNSEC3",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1387,
                                    "src": "10838:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                      "typeString": "struct RRUtils.NSEC3 memory"
                                    }
                                  },
                                  "id": 1413,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "checkTypeBitmap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3547,
                                  "src": "10838:23:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_NSEC3_$3392_memory_ptr_$_t_uint16_$returns$_t_bool_$bound_to$_t_struct$_NSEC3_$3392_memory_ptr_$",
                                    "typeString": "function (struct RRUtils.NSEC3 memory,uint16) pure returns (bool)"
                                  }
                                },
                                "id": 1415,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10838:36:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "10798:76:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1417,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10797:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10754:121:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1401,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10746:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10746:130:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1420,
                  "nodeType": "ExpressionStatement",
                  "src": "10746:130:2"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 1422,
                        "name": "deleteType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1318,
                        "src": "10994:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "id": 1423,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1320,
                        "src": "11006:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 1424,
                          "name": "ce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1347,
                          "src": "11018:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1425,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "name",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2899,
                        "src": "11018:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1426,
                        "name": "ceNSEC3",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1387,
                        "src": "11027:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        }
                      ],
                      "id": 1421,
                      "name": "isMatchingNSEC3Record",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1533,
                      "src": "10972:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint16_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_NSEC3_$3392_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (uint16,bytes memory,bytes memory,struct RRUtils.NSEC3 memory) view returns (bool)"
                      }
                    },
                    "id": 1427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10972:63:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "arguments": [
                        {
                          "id": 1439,
                          "name": "deleteType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1318,
                          "src": "11187:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        {
                          "id": 1440,
                          "name": "deleteName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1320,
                          "src": "11199:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "expression": {
                            "id": 1441,
                            "name": "ce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1347,
                            "src": "11211:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1442,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "name",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2899,
                          "src": "11211:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 1443,
                          "name": "ceNSEC3",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1387,
                          "src": "11220:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        },
                        {
                          "expression": {
                            "id": 1444,
                            "name": "nc",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1362,
                            "src": "11229:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1445,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "name",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2899,
                          "src": "11229:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "id": 1447,
                              "name": "nc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1362,
                              "src": "11248:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            ],
                            "id": 1446,
                            "name": "readNSEC3",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1688,
                            "src": "11238:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_NSEC3_$3392_memory_ptr_$",
                              "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.NSEC3 memory)"
                            }
                          },
                          "id": 1448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11238:13:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        ],
                        "id": 1438,
                        "name": "isCoveringNSEC3Record",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1660,
                        "src": "11165:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint16_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_NSEC3_$3392_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (uint16,bytes memory,bytes memory,struct RRUtils.NSEC3 memory,bytes memory,struct RRUtils.NSEC3 memory) view returns (bool)"
                        }
                      },
                      "id": 1449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11165:87:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 1463,
                      "nodeType": "Block",
                      "src": "11333:33:2",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1460,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -19,
                                -19
                              ],
                              "referencedDeclaration": -19,
                              "src": "11347:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1461,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11347:8:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1462,
                          "nodeType": "ExpressionStatement",
                          "src": "11347:8:2"
                        }
                      ]
                    },
                    "id": 1464,
                    "nodeType": "IfStatement",
                    "src": "11162:204:2",
                    "trueBody": {
                      "id": 1459,
                      "nodeType": "Block",
                      "src": "11254:73:2",
                      "statements": [
                        {
                          "expression": {
                            "id": 1457,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "delete",
                            "prefix": true,
                            "src": "11268:48:2",
                            "subExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 1450,
                                  "name": "rrsets",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 892,
                                  "src": "11275:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                    "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                                  }
                                },
                                "id": 1454,
                                "indexExpression": {
                                  "arguments": [
                                    {
                                      "id": 1452,
                                      "name": "deleteName",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1320,
                                      "src": "11292:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 1451,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "11282:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 1453,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11282:21:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11275:29:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                                  "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                                }
                              },
                              "id": 1456,
                              "indexExpression": {
                                "id": 1455,
                                "name": "deleteType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1318,
                                "src": "11305:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "11275:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSet_$886_storage",
                                "typeString": "struct DNSSECImpl.RRSet storage ref"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1458,
                          "nodeType": "ExpressionStatement",
                          "src": "11268:48:2"
                        }
                      ]
                    }
                  },
                  "id": 1465,
                  "nodeType": "IfStatement",
                  "src": "10969:397:2",
                  "trueBody": {
                    "id": 1437,
                    "nodeType": "Block",
                    "src": "11037:119:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "11051:48:2",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1428,
                                "name": "rrsets",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 892,
                                "src": "11058:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                                  "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                                }
                              },
                              "id": 1432,
                              "indexExpression": {
                                "arguments": [
                                  {
                                    "id": 1430,
                                    "name": "deleteName",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1320,
                                    "src": "11075:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 1429,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "11065:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 1431,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11065:21:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11058:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                                "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                              }
                            },
                            "id": 1434,
                            "indexExpression": {
                              "id": 1433,
                              "name": "deleteType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1318,
                              "src": "11088:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11058:41:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRSet_$886_storage",
                              "typeString": "struct DNSSECImpl.RRSet storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1436,
                        "nodeType": "ExpressionStatement",
                        "src": "11051:48:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1316,
              "nodeType": "StructuredDocumentation",
              "src": "8157:1552:2",
              "text": " @dev Deletes an RR from the oracle using an NSEC3 proof.\n      Deleting a record using NSEC3 requires using up to two NSEC3 records. There are two cases:\n       1. The name exists, but the record type doesn't. Eg, example.com has A records but no TXT records.\n       2. The name does not exist, but a parent name does.\n      In the first case, we submit one NSEC3 proof in `closestEncloser` that matches the target name\n      but does not have the bit for `deleteType` set in its type bitmap. In the second case, we submit\n      two proofs: closestEncloser and nextClosest, that together prove that the name does not exist.\n      NSEC3 records are in the format described in section 5.3.2 of RFC4035: The RRDATA section\n      from the RRSIG without the signature data, followed by a series of canonicalised RR records\n      that the signature applies to.\n @param deleteType The DNS record type to delete.\n @param deleteName The name to delete.\n @param closestEncloser An NSEC3 proof matching the closest enclosing name - that is,\n        the nearest ancestor of the target name that *does* exist.\n @param nextClosest An NSEC3 proof covering the next closest name. This proves that the immediate\n        subdomain of the closestEncloser does not exist.\n @param dnskey An encoded DNSKEY record that has already been submitted to the oracle and can be used\n        to verify the signatures closestEncloserSig and nextClosestSig"
            },
            "functionSelector": "0b1a2495",
            "id": 1467,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deleteRRSetNSEC3",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1328,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9902:8:2"
            },
            "parameters": {
              "id": 1327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1318,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9740:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1317,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "9740:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1320,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9759:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1319,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9759:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1322,
                  "mutability": "mutable",
                  "name": "closestEncloser",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9784:41:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1321,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "9784:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1324,
                  "mutability": "mutable",
                  "name": "nextClosest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9827:37:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1323,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "9827:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1326,
                  "mutability": "mutable",
                  "name": "dnskey",
                  "nodeType": "VariableDeclaration",
                  "scope": 1467,
                  "src": "9866:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1325,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9866:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9739:147:2"
            },
            "returnParameters": {
              "id": 1329,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9915:0:2"
            },
            "scope": 2629,
            "src": "9714:1658:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1503,
              "nodeType": "Block",
              "src": "11500:604:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "id": 1485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          },
                          "id": 1483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 1479,
                                  "name": "nsec",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1469,
                                  "src": "11609:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 1480,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "inception",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2891,
                                "src": "11609:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 1478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "11603:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int32_$",
                                "typeString": "type(int32)"
                              },
                              "typeName": {
                                "id": 1477,
                                "name": "int32",
                                "nodeType": "ElementaryTypeName",
                                "src": "11603:5:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11603:21:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 1482,
                            "name": "originalInception",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1473,
                            "src": "11627:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "src": "11603:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11648:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11603:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1476,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11595:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11595:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1487,
                  "nodeType": "ExpressionStatement",
                  "src": "11595:55:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 1492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 1489,
                            "name": "nsec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1469,
                            "src": "11708:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1490,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "typeCovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "11708:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1491,
                          "name": "DNSTYPE_NSEC3",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 870,
                          "src": "11728:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "11708:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1488,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11700:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11700:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1494,
                  "nodeType": "ExpressionStatement",
                  "src": "11700:42:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 1497,
                              "name": "nsec",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1469,
                              "src": "12074:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 1498,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "name",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2899,
                            "src": "12074:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "id": 1499,
                            "name": "deleteName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1471,
                            "src": "12085:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 1496,
                          "name": "checkNSEC3OwnerName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1809,
                          "src": "12054:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes memory,bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 1500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12054:42:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1495,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12046:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12046:51:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1502,
                  "nodeType": "ExpressionStatement",
                  "src": "12046:51:2"
                }
              ]
            },
            "id": 1504,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkNSEC3Validity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1469,
                  "mutability": "mutable",
                  "name": "nsec",
                  "nodeType": "VariableDeclaration",
                  "scope": 1504,
                  "src": "11406:29:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 1468,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "11406:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1471,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1504,
                  "src": "11437:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1470,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11437:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1473,
                  "mutability": "mutable",
                  "name": "originalInception",
                  "nodeType": "VariableDeclaration",
                  "scope": 1504,
                  "src": "11462:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int32",
                    "typeString": "int32"
                  },
                  "typeName": {
                    "id": 1472,
                    "name": "int32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11462:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int32",
                      "typeString": "int32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11405:81:2"
            },
            "returnParameters": {
              "id": 1475,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11500:0:2"
            },
            "scope": 2629,
            "src": "11378:726:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1532,
              "nodeType": "Block",
              "src": "12284:283:2",
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 1518,
                        "name": "closestEncloser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1512,
                        "src": "12411:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        }
                      },
                      {
                        "id": 1519,
                        "name": "closestEncloserName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1510,
                        "src": "12428:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1520,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1508,
                        "src": "12449:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1517,
                      "name": "checkNSEC3Name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1717,
                      "src": "12396:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (struct RRUtils.NSEC3 memory,bytes memory,bytes memory) view returns (bool)"
                      }
                    },
                    "id": 1521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12396:64:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1529,
                  "nodeType": "IfStatement",
                  "src": "12393:145:2",
                  "trueBody": {
                    "id": 1528,
                    "nodeType": "Block",
                    "src": "12462:76:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 1526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "12483:44:2",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 1524,
                                "name": "deleteType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1506,
                                "src": "12516:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 1522,
                                "name": "closestEncloser",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1512,
                                "src": "12484:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                  "typeString": "struct RRUtils.NSEC3 memory"
                                }
                              },
                              "id": 1523,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "checkTypeBitmap",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3547,
                              "src": "12484:31:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_NSEC3_$3392_memory_ptr_$_t_uint16_$returns$_t_bool_$bound_to$_t_struct$_NSEC3_$3392_memory_ptr_$",
                                "typeString": "function (struct RRUtils.NSEC3 memory,uint16) pure returns (bool)"
                              }
                            },
                            "id": 1525,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12484:43:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1516,
                        "id": 1527,
                        "nodeType": "Return",
                        "src": "12476:51:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 1530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12555:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1516,
                  "id": 1531,
                  "nodeType": "Return",
                  "src": "12548:12:2"
                }
              ]
            },
            "id": 1533,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isMatchingNSEC3Record",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1506,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12141:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1505,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12141:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1508,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12160:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1507,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12160:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1510,
                  "mutability": "mutable",
                  "name": "closestEncloserName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12185:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1509,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12185:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1512,
                  "mutability": "mutable",
                  "name": "closestEncloser",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12219:36:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1511,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "12219:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12140:116:2"
            },
            "returnParameters": {
              "id": 1516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1515,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1533,
                  "src": "12278:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1514,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12278:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12277:6:2"
            },
            "scope": 2629,
            "src": "12110:457:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1659,
              "nodeType": "Block",
              "src": "12767:1220:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 1556,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 1554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1551,
                              "name": "nc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1545,
                              "src": "12850:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                "typeString": "struct RRUtils.NSEC3 memory"
                              }
                            },
                            "id": 1552,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "flags",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3383,
                            "src": "12850:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&",
                          "rightExpression": {
                            "hexValue": "30786665",
                            "id": 1553,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12861:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_254_by_1",
                              "typeString": "int_const 254"
                            },
                            "value": "0xfe"
                          },
                          "src": "12850:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12869:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12850:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1550,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12842:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12842:29:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1558,
                  "nodeType": "ExpressionStatement",
                  "src": "12842:29:2"
                },
                {
                  "assignments": [
                    1560
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1560,
                      "mutability": "mutable",
                      "name": "ceNameHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1659,
                      "src": "12882:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1559,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12882:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1564,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1562,
                        "name": "ceName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1539,
                        "src": "12923:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1561,
                      "name": "decodeOwnerNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1759,
                      "src": "12903:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12903:27:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12882:48:2"
                },
                {
                  "assignments": [
                    1566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1566,
                      "mutability": "mutable",
                      "name": "ncNameHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1659,
                      "src": "12940:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1565,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12940:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1570,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1568,
                        "name": "ncName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1543,
                        "src": "12981:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1567,
                      "name": "decodeOwnerNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1759,
                      "src": "12961:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12961:27:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12940:48:2"
                },
                {
                  "assignments": [
                    1572
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1572,
                      "mutability": "mutable",
                      "name": "lastOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1659,
                      "src": "12999:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1571,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "12999:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1574,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 1573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13017:1:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12999:19:2"
                },
                {
                  "body": {
                    "id": 1655,
                    "nodeType": "Block",
                    "src": "13241:645:2",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 1609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 1598,
                                "name": "ce",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1541,
                                "src": "13267:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                  "typeString": "struct RRUtils.NSEC3 memory"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 1601,
                                    "name": "offset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1576,
                                    "src": "13292:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1605,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 1602,
                                        "name": "deleteName",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1537,
                                        "src": "13300:10:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 1603,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "13300:17:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 1604,
                                      "name": "offset",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1576,
                                      "src": "13320:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "13300:26:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1599,
                                    "name": "deleteName",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1537,
                                    "src": "13271:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "substring",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 502,
                                  "src": "13271:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                  }
                                },
                                "id": 1606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13271:56:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                  "typeString": "struct RRUtils.NSEC3 memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1597,
                              "name": "hashName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1739,
                              "src": "13258:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (struct RRUtils.NSEC3 memory,bytes memory) view returns (bytes32)"
                              }
                            },
                            "id": 1607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13258:70:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 1608,
                            "name": "ceNameHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1560,
                            "src": "13332:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "13258:84:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1650,
                        "nodeType": "IfStatement",
                        "src": "13255:588:2",
                        "trueBody": {
                          "id": 1649,
                          "nodeType": "Block",
                          "src": "13344:499:2",
                          "statements": [
                            {
                              "assignments": [
                                1611
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1611,
                                  "mutability": "mutable",
                                  "name": "checkHash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1649,
                                  "src": "13451:17:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 1610,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13451:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1623,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1613,
                                    "name": "nc",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1545,
                                    "src": "13480:2:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                      "typeString": "struct RRUtils.NSEC3 memory"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 1616,
                                        "name": "lastOffset",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1572,
                                        "src": "13505:10:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 1620,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "id": 1617,
                                            "name": "deleteName",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1537,
                                            "src": "13517:10:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 1618,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "length",
                                          "nodeType": "MemberAccess",
                                          "src": "13517:17:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "id": 1619,
                                          "name": "lastOffset",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1572,
                                          "src": "13537:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "13517:30:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 1614,
                                        "name": "deleteName",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1537,
                                        "src": "13484:10:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 1615,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "substring",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 502,
                                      "src": "13484:20:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 1621,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13484:64:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                      "typeString": "struct RRUtils.NSEC3 memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 1612,
                                  "name": "hashName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1739,
                                  "src": "13471:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (struct RRUtils.NSEC3 memory,bytes memory) view returns (bytes32)"
                                  }
                                },
                                "id": 1622,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13471:78:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13451:98:2"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 1627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1624,
                                  "name": "ncNameHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1566,
                                  "src": "13570:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "expression": {
                                    "id": 1625,
                                    "name": "nc",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1545,
                                    "src": "13583:2:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                      "typeString": "struct RRUtils.NSEC3 memory"
                                    }
                                  },
                                  "id": 1626,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nextHashedOwnerName",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3389,
                                  "src": "13583:22:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "13570:35:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1647,
                                "nodeType": "Block",
                                "src": "13721:108:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 1645,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 1640,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1638,
                                          "name": "checkHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1611,
                                          "src": "13750:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                          "id": 1639,
                                          "name": "ncNameHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1566,
                                          "src": "13762:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "13750:22:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "||",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 1644,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1641,
                                          "name": "checkHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1611,
                                          "src": "13776:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 1642,
                                            "name": "nc",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1545,
                                            "src": "13788:2:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                              "typeString": "struct RRUtils.NSEC3 memory"
                                            }
                                          },
                                          "id": 1643,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "nextHashedOwnerName",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3389,
                                          "src": "13788:22:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "13776:34:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "13750:60:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "functionReturnParameters": 1549,
                                    "id": 1646,
                                    "nodeType": "Return",
                                    "src": "13743:67:2"
                                  }
                                ]
                              },
                              "id": 1648,
                              "nodeType": "IfStatement",
                              "src": "13567:262:2",
                              "trueBody": {
                                "id": 1637,
                                "nodeType": "Block",
                                "src": "13607:108:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 1635,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 1630,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1628,
                                          "name": "checkHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1611,
                                          "src": "13636:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                          "id": 1629,
                                          "name": "ncNameHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1566,
                                          "src": "13648:10:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "13636:22:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 1634,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1631,
                                          "name": "checkHash",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1611,
                                          "src": "13662:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 1632,
                                            "name": "nc",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1545,
                                            "src": "13674:2:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                                              "typeString": "struct RRUtils.NSEC3 memory"
                                            }
                                          },
                                          "id": 1633,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "nextHashedOwnerName",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3389,
                                          "src": "13674:22:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "13662:34:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "13636:60:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "functionReturnParameters": 1549,
                                    "id": 1636,
                                    "nodeType": "Return",
                                    "src": "13629:67:2"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1651,
                            "name": "lastOffset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1572,
                            "src": "13856:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1652,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1576,
                            "src": "13869:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13856:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1654,
                        "nodeType": "ExpressionStatement",
                        "src": "13856:19:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1584,
                      "name": "offset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1576,
                      "src": "13169:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1585,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1537,
                        "src": "13178:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1586,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13178:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13169:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1656,
                  "initializationExpression": {
                    "assignments": [
                      1576
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1576,
                        "mutability": "mutable",
                        "name": "offset",
                        "nodeType": "VariableDeclaration",
                        "scope": 1656,
                        "src": "13126:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1575,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "13126:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1583,
                    "initialValue": {
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 1582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1579,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13161:1:2",
                            "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"
                            }
                          ],
                          "expression": {
                            "id": 1577,
                            "name": "deleteName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1537,
                            "src": "13140:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "readUint8",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 311,
                          "src": "13140:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                          }
                        },
                        "id": 1580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13140:23:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 1581,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13166:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "13140:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13126:41:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1588,
                        "name": "offset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1576,
                        "src": "13197:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 1594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 1591,
                              "name": "offset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1576,
                              "src": "13228:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1589,
                              "name": "deleteName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1537,
                              "src": "13207:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "readUint8",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 311,
                            "src": "13207:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                            }
                          },
                          "id": 1592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13207:28:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13238:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "13207:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "13197:42:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1596,
                    "nodeType": "ExpressionStatement",
                    "src": "13197:42:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "13122:764:2"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 1657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13975:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1549,
                  "id": 1658,
                  "nodeType": "Return",
                  "src": "13968:12:2"
                }
              ]
            },
            "id": 1660,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isCoveringNSEC3Record",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1535,
                  "mutability": "mutable",
                  "name": "deleteType",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12604:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1534,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12604:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1537,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12623:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1536,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12623:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1539,
                  "mutability": "mutable",
                  "name": "ceName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12648:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1538,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12648:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1541,
                  "mutability": "mutable",
                  "name": "ce",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12669:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1540,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "12669:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1543,
                  "mutability": "mutable",
                  "name": "ncName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12694:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1542,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12694:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1545,
                  "mutability": "mutable",
                  "name": "nc",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12715:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1544,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "12715:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12603:136:2"
            },
            "returnParameters": {
              "id": 1549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1548,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "12761:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1547,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12761:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12760:6:2"
            },
            "scope": 2629,
            "src": "12573:1414:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1687,
              "nodeType": "Block",
              "src": "14084:148:2",
              "statements": [
                {
                  "assignments": [
                    1670
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1670,
                      "mutability": "mutable",
                      "name": "iter",
                      "nodeType": "VariableDeclaration",
                      "scope": 1687,
                      "src": "14094:30:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator"
                      },
                      "typeName": {
                        "id": 1669,
                        "name": "RRUtils.RRIterator",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3030,
                        "src": "14094:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1674,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 1671,
                        "name": "ss",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1662,
                        "src": "14127:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 1672,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rrs",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3015,
                      "src": "14127:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_struct$_SignedSet_$2900_memory_ptr_$",
                        "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.RRIterator memory)"
                      }
                    },
                    "id": 1673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14127:8:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                      "typeString": "struct RRUtils.RRIterator memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14094:41:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1678,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1670,
                          "src": "14172:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1679,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rdataOffset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3027,
                        "src": "14172:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 1680,
                            "name": "iter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1670,
                            "src": "14190:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                              "typeString": "struct RRUtils.RRIterator memory"
                            }
                          },
                          "id": 1681,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nextOffset",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3029,
                          "src": "14190:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "expression": {
                            "id": 1682,
                            "name": "iter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1670,
                            "src": "14208:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                              "typeString": "struct RRUtils.RRIterator memory"
                            }
                          },
                          "id": 1683,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rdataOffset",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3027,
                          "src": "14208:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14190:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "expression": {
                          "id": 1675,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1670,
                          "src": "14152:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 1676,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3017,
                        "src": "14152:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1677,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "readNSEC3",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3530,
                      "src": "14152:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_struct$_NSEC3_$3392_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (struct RRUtils.NSEC3 memory)"
                      }
                    },
                    "id": 1685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14152:73:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                      "typeString": "struct RRUtils.NSEC3 memory"
                    }
                  },
                  "functionReturnParameters": 1666,
                  "id": 1686,
                  "nodeType": "Return",
                  "src": "14145:80:2"
                }
              ]
            },
            "id": 1688,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readNSEC3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1662,
                  "mutability": "mutable",
                  "name": "ss",
                  "nodeType": "VariableDeclaration",
                  "scope": 1688,
                  "src": "14012:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 1661,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "14012:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14011:29:2"
            },
            "returnParameters": {
              "id": 1666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1665,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1688,
                  "src": "14062:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1664,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "14062:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14061:22:2"
            },
            "scope": 2629,
            "src": "13993:239:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1716,
              "nodeType": "Block",
              "src": "14365:326:2",
              "statements": [
                {
                  "assignments": [
                    1700
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1700,
                      "mutability": "mutable",
                      "name": "deleteNameHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1716,
                      "src": "14437:22:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1699,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "14437:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1705,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1702,
                        "name": "nsec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1690,
                        "src": "14471:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        }
                      },
                      {
                        "id": 1703,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1694,
                        "src": "14477:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                          "typeString": "struct RRUtils.NSEC3 memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1701,
                      "name": "hashName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1739,
                      "src": "14462:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_NSEC3_$3392_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (struct RRUtils.NSEC3 memory,bytes memory) view returns (bytes32)"
                      }
                    },
                    "id": 1704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14462:26:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14437:51:2"
                },
                {
                  "assignments": [
                    1707
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1707,
                      "mutability": "mutable",
                      "name": "nsecNameHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1716,
                      "src": "14583:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1706,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "14583:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1711,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1709,
                        "name": "ownerName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1692,
                        "src": "14626:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1708,
                      "name": "decodeOwnerNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1759,
                      "src": "14606:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14606:30:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14583:53:2"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1712,
                      "name": "deleteNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1700,
                      "src": "14654:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 1713,
                      "name": "nsecNameHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1707,
                      "src": "14672:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "14654:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1698,
                  "id": 1715,
                  "nodeType": "Return",
                  "src": "14647:37:2"
                }
              ]
            },
            "id": 1717,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkNSEC3Name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1690,
                  "mutability": "mutable",
                  "name": "nsec",
                  "nodeType": "VariableDeclaration",
                  "scope": 1717,
                  "src": "14262:25:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1689,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "14262:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1692,
                  "mutability": "mutable",
                  "name": "ownerName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1717,
                  "src": "14289:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1691,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14289:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1694,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1717,
                  "src": "14313:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1693,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14313:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14261:76:2"
            },
            "returnParameters": {
              "id": 1698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1697,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1717,
                  "src": "14359:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1696,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14359:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14358:6:2"
            },
            "scope": 2629,
            "src": "14238:453:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1738,
              "nodeType": "Block",
              "src": "14791:95:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1731,
                          "name": "nsec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1719,
                          "src": "14846:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        },
                        "id": 1732,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "salt",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3387,
                        "src": "14846:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1733,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1721,
                        "src": "14857:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 1734,
                          "name": "nsec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1719,
                          "src": "14863:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                            "typeString": "struct RRUtils.NSEC3 memory"
                          }
                        },
                        "id": 1735,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "iterations",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3385,
                        "src": "14863:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 1726,
                          "name": "nsec3Digests",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 904,
                          "src": "14808:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_NSEC3Digest_$5847_$",
                            "typeString": "mapping(uint8 => contract NSEC3Digest)"
                          }
                        },
                        "id": 1729,
                        "indexExpression": {
                          "expression": {
                            "id": 1727,
                            "name": "nsec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1719,
                            "src": "14821:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                              "typeString": "struct RRUtils.NSEC3 memory"
                            }
                          },
                          "id": 1728,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hashAlgorithm",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3381,
                          "src": "14821:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14808:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NSEC3Digest_$5847",
                          "typeString": "contract NSEC3Digest"
                        }
                      },
                      "id": 1730,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5846,
                      "src": "14808:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,bytes memory,uint256) pure external returns (bytes32)"
                      }
                    },
                    "id": 1736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14808:71:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1725,
                  "id": 1737,
                  "nodeType": "Return",
                  "src": "14801:78:2"
                }
              ]
            },
            "id": 1739,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hashName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1719,
                  "mutability": "mutable",
                  "name": "nsec",
                  "nodeType": "VariableDeclaration",
                  "scope": 1739,
                  "src": "14715:25:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_NSEC3_$3392_memory_ptr",
                    "typeString": "struct RRUtils.NSEC3"
                  },
                  "typeName": {
                    "id": 1718,
                    "name": "RRUtils.NSEC3",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3392,
                    "src": "14715:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_NSEC3_$3392_storage_ptr",
                      "typeString": "struct RRUtils.NSEC3"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1721,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1739,
                  "src": "14742:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1720,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14742:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14714:46:2"
            },
            "returnParameters": {
              "id": 1725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1724,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1739,
                  "src": "14782:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1723,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14782:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14781:9:2"
            },
            "scope": 2629,
            "src": "14697:189:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1758,
              "nodeType": "Block",
              "src": "14970:76:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "31",
                        "id": 1748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15012:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15035:1:2",
                                "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"
                                }
                              ],
                              "expression": {
                                "id": 1751,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1741,
                                "src": "15020:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "readUint8",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 311,
                              "src": "15020:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                              }
                            },
                            "id": 1754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15020:17:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 1750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15015:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1749,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15015:4:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1755,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15015:23:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 1746,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1741,
                        "src": "14987:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "base32HexDecodeWord",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 729,
                      "src": "14987:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 1756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14987:52:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1745,
                  "id": 1757,
                  "nodeType": "Return",
                  "src": "14980:59:2"
                }
              ]
            },
            "id": 1759,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decodeOwnerNameHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1741,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1759,
                  "src": "14921:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1740,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14921:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14920:19:2"
            },
            "returnParameters": {
              "id": 1745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1744,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1759,
                  "src": "14961:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1743,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14961:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14960:9:2"
            },
            "scope": 2629,
            "src": "14892:154:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1808,
              "nodeType": "Block",
              "src": "15156:384:2",
              "statements": [
                {
                  "assignments": [
                    1769
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1769,
                      "mutability": "mutable",
                      "name": "nsecNameOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1808,
                      "src": "15166:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1768,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15166:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1776,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 1775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15207:1:2",
                          "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"
                          }
                        ],
                        "expression": {
                          "id": 1770,
                          "name": "nsecName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1761,
                          "src": "15188:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "readUint8",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 311,
                        "src": "15188:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                        }
                      },
                      "id": 1773,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15188:21:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 1774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15212:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "15188:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15166:47:2"
                },
                {
                  "assignments": [
                    1778
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1778,
                      "mutability": "mutable",
                      "name": "deleteNameOffset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1808,
                      "src": "15223:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1777,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15223:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1780,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 1779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15247:1:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15223:25:2"
                },
                {
                  "body": {
                    "id": 1804,
                    "nodeType": "Block",
                    "src": "15302:210:2",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 1787,
                              "name": "deleteNameOffset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1778,
                              "src": "15337:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1788,
                              "name": "nsecName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1761,
                              "src": "15355:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1789,
                              "name": "nsecNameOffset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1769,
                              "src": "15365:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1785,
                              "name": "deleteName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1763,
                              "src": "15319:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "equals",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 240,
                            "src": "15319:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,bytes memory,uint256) pure returns (bool)"
                            }
                          },
                          "id": 1790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15319:61:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1794,
                        "nodeType": "IfStatement",
                        "src": "15316:110:2",
                        "trueBody": {
                          "id": 1793,
                          "nodeType": "Block",
                          "src": "15382:44:2",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 1791,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15407:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 1767,
                              "id": 1792,
                              "nodeType": "Return",
                              "src": "15400:11:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1802,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1795,
                            "name": "deleteNameOffset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1778,
                            "src": "15439:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 1801,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 1798,
                                  "name": "deleteNameOffset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1778,
                                  "src": "15480:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 1796,
                                  "name": "deleteName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1763,
                                  "src": "15459:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 1797,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "readUint8",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 311,
                                "src": "15459:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                                }
                              },
                              "id": 1799,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15459:38:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 1800,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15500:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "15459:42:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "15439:62:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1803,
                        "nodeType": "ExpressionStatement",
                        "src": "15439:62:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1781,
                      "name": "deleteNameOffset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1778,
                      "src": "15264:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1782,
                        "name": "deleteName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1763,
                        "src": "15283:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 1783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "15283:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15264:36:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1805,
                  "nodeType": "WhileStatement",
                  "src": "15258:254:2"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 1806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15528:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 1767,
                  "id": 1807,
                  "nodeType": "Return",
                  "src": "15521:12:2"
                }
              ]
            },
            "id": 1809,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkNSEC3OwnerName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1761,
                  "mutability": "mutable",
                  "name": "nsecName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1809,
                  "src": "15081:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1760,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15081:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1763,
                  "mutability": "mutable",
                  "name": "deleteName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1809,
                  "src": "15104:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1762,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15104:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15080:48:2"
            },
            "returnParameters": {
              "id": 1767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1766,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1809,
                  "src": "15150:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1765,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15150:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15149:6:2"
            },
            "scope": 2629,
            "src": "15052:488:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              819
            ],
            "body": {
              "id": 1842,
              "nodeType": "Block",
              "src": "16143:137:2",
              "statements": [
                {
                  "assignments": [
                    1825
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1825,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1842,
                      "src": "16153:20:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                        "typeString": "struct DNSSECImpl.RRSet"
                      },
                      "typeName": {
                        "id": 1824,
                        "name": "RRSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 886,
                        "src": "16153:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                          "typeString": "struct DNSSECImpl.RRSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1833,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 1826,
                        "name": "rrsets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 892,
                        "src": "16176:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                          "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                        }
                      },
                      "id": 1830,
                      "indexExpression": {
                        "arguments": [
                          {
                            "id": 1828,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1814,
                            "src": "16193:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "id": 1827,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "16183:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 1829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16183:15:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16176:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                        "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                      }
                    },
                    "id": 1832,
                    "indexExpression": {
                      "id": 1831,
                      "name": "dnstype",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1812,
                      "src": "16200:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16176:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSet_$886_storage",
                      "typeString": "struct DNSSECImpl.RRSet storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16153:55:2"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "id": 1834,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1825,
                          "src": "16226:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                            "typeString": "struct DNSSECImpl.RRSet storage pointer"
                          }
                        },
                        "id": 1835,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "inception",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 881,
                        "src": "16226:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "expression": {
                          "id": 1836,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1825,
                          "src": "16244:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                            "typeString": "struct DNSSECImpl.RRSet storage pointer"
                          }
                        },
                        "id": 1837,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "inserted",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 883,
                        "src": "16244:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "expression": {
                          "id": 1838,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1825,
                          "src": "16261:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                            "typeString": "struct DNSSECImpl.RRSet storage pointer"
                          }
                        },
                        "id": 1839,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 885,
                        "src": "16261:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      }
                    ],
                    "id": 1840,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "16225:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_uint64_$_t_bytes20_$",
                      "typeString": "tuple(uint32,uint64,bytes20)"
                    }
                  },
                  "functionReturnParameters": 1823,
                  "id": 1841,
                  "nodeType": "Return",
                  "src": "16218:55:2"
                }
              ]
            },
            "documentation": {
              "id": 1810,
              "nodeType": "StructuredDocumentation",
              "src": "15546:482:2",
              "text": " @dev Returns data about the RRs (if any) known to this oracle with the provided type and name.\n @param dnstype The DNS record type to query.\n @param name The name to query, in DNS label-sequence format.\n @return inception The unix timestamp at which the signature for this RRSET was created.\n @return inserted The unix timestamp at which this RRSET was inserted into the oracle.\n @return hash The hash of the RRset that was inserted."
            },
            "functionSelector": "087991bc",
            "id": 1843,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rrdata",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1816,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16095:8:2"
            },
            "parameters": {
              "id": 1815,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1812,
                  "mutability": "mutable",
                  "name": "dnstype",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16049:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1811,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "16049:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1814,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16065:19:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1813,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16065:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16048:37:2"
            },
            "returnParameters": {
              "id": 1823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1818,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16118:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1817,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16118:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1820,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16126:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1819,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "16126:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1822,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1843,
                  "src": "16134:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 1821,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "16134:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16117:25:2"
            },
            "scope": 2629,
            "src": "16033:247:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1932,
              "nodeType": "Block",
              "src": "16393:680:2",
              "statements": [
                {
                  "assignments": [
                    1855
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1855,
                      "mutability": "mutable",
                      "name": "rrset",
                      "nodeType": "VariableDeclaration",
                      "scope": 1932,
                      "src": "16403:30:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet"
                      },
                      "typeName": {
                        "id": 1854,
                        "name": "RRUtils.SignedSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2900,
                        "src": "16403:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                          "typeString": "struct RRUtils.SignedSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1856,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16403:30:2"
                },
                {
                  "expression": {
                    "id": 1862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1857,
                      "name": "rrset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1855,
                      "src": "16443:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1859,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1845,
                          "src": "16469:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        {
                          "id": 1860,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1847,
                          "src": "16476:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1858,
                        "name": "validateSignedSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2018,
                        "src": "16451:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct DNSSEC.RRSetWithSignature memory,bytes memory) view returns (struct RRUtils.SignedSet memory)"
                        }
                      },
                      "id": 1861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16451:31:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "src": "16443:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "id": 1863,
                  "nodeType": "ExpressionStatement",
                  "src": "16443:39:2"
                },
                {
                  "assignments": [
                    1865
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1865,
                      "mutability": "mutable",
                      "name": "storedSet",
                      "nodeType": "VariableDeclaration",
                      "scope": 1932,
                      "src": "16493:23:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                        "typeString": "struct DNSSECImpl.RRSet"
                      },
                      "typeName": {
                        "id": 1864,
                        "name": "RRSet",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 886,
                        "src": "16493:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                          "typeString": "struct DNSSECImpl.RRSet"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1875,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 1866,
                        "name": "rrsets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 892,
                        "src": "16519:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                          "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                        }
                      },
                      "id": 1871,
                      "indexExpression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 1868,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1855,
                              "src": "16536:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 1869,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "name",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2899,
                            "src": "16536:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 1867,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "16526:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 1870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16526:21:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16519:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                        "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                      }
                    },
                    "id": 1874,
                    "indexExpression": {
                      "expression": {
                        "id": 1872,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1855,
                        "src": "16549:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 1873,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "typeCovered",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2881,
                      "src": "16549:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "16519:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSet_$886_storage",
                      "typeString": "struct DNSSECImpl.RRSet storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16493:74:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1876,
                        "name": "storedSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1865,
                        "src": "16581:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                          "typeString": "struct DNSSECImpl.RRSet storage pointer"
                        }
                      },
                      "id": 1877,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "inserted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 883,
                      "src": "16581:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16602:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16581:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1894,
                  "nodeType": "IfStatement",
                  "src": "16577:194:2",
                  "trueBody": {
                    "id": 1893,
                    "nodeType": "Block",
                    "src": "16605:166:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int32",
                                "typeString": "int32"
                              },
                              "id": 1890,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    },
                                    "id": 1887,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 1883,
                                        "name": "rrset",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1855,
                                        "src": "16716:5:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                          "typeString": "struct RRUtils.SignedSet memory"
                                        }
                                      },
                                      "id": 1884,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "inception",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2891,
                                      "src": "16716:15:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 1885,
                                        "name": "storedSet",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1865,
                                        "src": "16734:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_RRSet_$886_storage_ptr",
                                          "typeString": "struct DNSSECImpl.RRSet storage pointer"
                                        }
                                      },
                                      "id": 1886,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "inception",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 881,
                                      "src": "16734:19:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "src": "16716:37:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  ],
                                  "id": 1882,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16710:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_int32_$",
                                    "typeString": "type(int32)"
                                  },
                                  "typeName": {
                                    "id": 1881,
                                    "name": "int32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16710:5:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1888,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16710:44:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int32",
                                  "typeString": "int32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 1889,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16758:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "16710:49:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1880,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "16702:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16702:58:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1892,
                        "nodeType": "ExpressionStatement",
                        "src": "16702:58:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1895,
                          "name": "rrsets",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 892,
                          "src": "16781:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                          }
                        },
                        "id": 1902,
                        "indexExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1897,
                                "name": "rrset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1855,
                                "src": "16798:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                  "typeString": "struct RRUtils.SignedSet memory"
                                }
                              },
                              "id": 1898,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "name",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2899,
                              "src": "16798:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1896,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "16788:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 1899,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16788:21:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16781:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                          "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                        }
                      },
                      "id": 1903,
                      "indexExpression": {
                        "expression": {
                          "id": 1900,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1855,
                          "src": "16811:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1901,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "typeCovered",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2881,
                        "src": "16811:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16781:48:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_storage",
                        "typeString": "struct DNSSECImpl.RRSet storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 1905,
                            "name": "rrset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1855,
                            "src": "16863:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1906,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inception",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2891,
                          "src": "16863:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1909,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "16909:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 1910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "16909:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1908,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16902:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint64_$",
                              "typeString": "type(uint64)"
                            },
                            "typeName": {
                              "id": 1907,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "16902:6:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16902:23:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1915,
                                    "name": "rrset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1855,
                                    "src": "16963:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                      "typeString": "struct RRUtils.SignedSet memory"
                                    }
                                  },
                                  "id": 1916,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "data",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2897,
                                  "src": "16963:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 1914,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "16953:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 1917,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16953:21:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1913,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16945:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes20_$",
                              "typeString": "type(bytes20)"
                            },
                            "typeName": {
                              "id": 1912,
                              "name": "bytes20",
                              "nodeType": "ElementaryTypeName",
                              "src": "16945:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16945:30:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        ],
                        "id": 1904,
                        "name": "RRSet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 886,
                        "src": "16832:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_RRSet_$886_storage_ptr_$",
                          "typeString": "type(struct DNSSECImpl.RRSet storage pointer)"
                        }
                      },
                      "id": 1919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "inception",
                        "inserted",
                        "hash"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "16832:154:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRSet_$886_memory_ptr",
                        "typeString": "struct DNSSECImpl.RRSet memory"
                      }
                    },
                    "src": "16781:205:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSet_$886_storage",
                      "typeString": "struct DNSSECImpl.RRSet storage ref"
                    }
                  },
                  "id": 1921,
                  "nodeType": "ExpressionStatement",
                  "src": "16781:205:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1923,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1855,
                          "src": "17015:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1924,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "name",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2899,
                        "src": "17015:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 1925,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1855,
                          "src": "17027:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1926,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2897,
                        "src": "17027:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1922,
                      "name": "RRSetUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 764,
                      "src": "17002:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,bytes memory)"
                      }
                    },
                    "id": 1927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17002:36:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1928,
                  "nodeType": "EmitStatement",
                  "src": "16997:41:2"
                },
                {
                  "expression": {
                    "expression": {
                      "id": 1929,
                      "name": "rrset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1855,
                      "src": "17056:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "id": 1930,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "data",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2897,
                    "src": "17056:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1851,
                  "id": 1931,
                  "nodeType": "Return",
                  "src": "17049:17:2"
                }
              ]
            },
            "id": 1933,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_submitRRSet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1848,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1845,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "16308:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1844,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "16308:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1847,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "16341:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1846,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16341:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16307:53:2"
            },
            "returnParameters": {
              "id": 1851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1850,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "16379:12:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1849,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16379:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16378:14:2"
            },
            "scope": 2629,
            "src": "16286:787:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2017,
              "nodeType": "Block",
              "src": "17927:1033:2",
              "statements": [
                {
                  "expression": {
                    "id": 1948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1943,
                      "name": "rrset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1941,
                      "src": "17937:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "expression": {
                            "id": 1944,
                            "name": "input",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1936,
                            "src": "17945:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                              "typeString": "struct DNSSEC.RRSetWithSignature memory"
                            }
                          },
                          "id": 1945,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rrset",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 737,
                          "src": "17945:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "readSignedSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3001,
                        "src": "17945:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_SignedSet_$2900_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) pure returns (struct RRUtils.SignedSet memory)"
                        }
                      },
                      "id": 1947,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17945:27:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                        "typeString": "struct RRUtils.SignedSet memory"
                      }
                    },
                    "src": "17937:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "id": 1949,
                  "nodeType": "ExpressionStatement",
                  "src": "17937:35:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 1952,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1941,
                              "src": "18001:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 1953,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signerName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2895,
                            "src": "18001:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "id": 1954,
                            "name": "proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1938,
                            "src": "18019:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 1951,
                          "name": "validProof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2054,
                          "src": "17990:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes memory,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 1955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17990:35:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1950,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17982:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17982:44:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1957,
                  "nodeType": "ExpressionStatement",
                  "src": "17982:44:2"
                },
                {
                  "assignments": [
                    1959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1959,
                      "mutability": "mutable",
                      "name": "name",
                      "nodeType": "VariableDeclaration",
                      "scope": 2017,
                      "src": "18101:17:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1958,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "18101:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1965,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1961,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1941,
                        "src": "18133:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 1962,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1941,
                          "src": "18140:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 1963,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "typeCovered",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2881,
                        "src": "18140:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 1960,
                      "name": "validateRRs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2135,
                      "src": "18121:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$_t_uint16_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (struct RRUtils.SignedSet memory,uint16) pure returns (bytes memory)"
                      }
                    },
                    "id": 1964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18121:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18101:57:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 1969,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18192:1:2",
                              "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"
                              }
                            ],
                            "expression": {
                              "id": 1967,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1959,
                              "src": "18176:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1968,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "labelCount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2855,
                            "src": "18176:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18176:18:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 1971,
                            "name": "rrset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1941,
                            "src": "18198:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                              "typeString": "struct RRUtils.SignedSet memory"
                            }
                          },
                          "id": 1972,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "labels",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2885,
                          "src": "18198:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "18176:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1966,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18168:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18168:43:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1975,
                  "nodeType": "ExpressionStatement",
                  "src": "18168:43:2"
                },
                {
                  "expression": {
                    "id": 1980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1976,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1941,
                        "src": "18221:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 1978,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "name",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2899,
                      "src": "18221:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1979,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1959,
                      "src": "18234:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "18221:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 1981,
                  "nodeType": "ExpressionStatement",
                  "src": "18221:17:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "id": 1992,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1989,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1985,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "18582:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 1986,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "expiration",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2889,
                                "src": "18582:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "expression": {
                                  "id": 1987,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "18601:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 1988,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "18601:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18582:34:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1984,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18576:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int32_$",
                              "typeString": "type(int32)"
                            },
                            "typeName": {
                              "id": 1983,
                              "name": "int32",
                              "nodeType": "ElementaryTypeName",
                              "src": "18576:5:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18576:41:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18621:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "18576:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1982,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18568:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18568:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1994,
                  "nodeType": "ExpressionStatement",
                  "src": "18568:55:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "id": 2005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1998,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "18803:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 1999,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "18803:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "expression": {
                                  "id": 2000,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "18821:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 2001,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "inception",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2891,
                                "src": "18821:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "src": "18803:33:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18797:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int32_$",
                              "typeString": "type(int32)"
                            },
                            "typeName": {
                              "id": 1996,
                              "name": "int32",
                              "nodeType": "ElementaryTypeName",
                              "src": "18797:5:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 2003,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18797:40:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 2004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18841:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "18797:45:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1995,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18789:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18789:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2007,
                  "nodeType": "ExpressionStatement",
                  "src": "18789:54:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2009,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1959,
                        "src": "18904:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 2010,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1941,
                        "src": "18910:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      {
                        "id": 2011,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1936,
                        "src": "18917:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        }
                      },
                      {
                        "id": 2012,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1938,
                        "src": "18924:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                          "typeString": "struct DNSSEC.RRSetWithSignature memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2008,
                      "name": "verifySignature",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2214,
                      "src": "18888:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory,bytes memory) view"
                      }
                    },
                    "id": 2013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18888:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2014,
                  "nodeType": "ExpressionStatement",
                  "src": "18888:42:2"
                },
                {
                  "expression": {
                    "id": 2015,
                    "name": "rrset",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1941,
                    "src": "18948:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                      "typeString": "struct RRUtils.SignedSet memory"
                    }
                  },
                  "functionReturnParameters": 1942,
                  "id": 2016,
                  "nodeType": "Return",
                  "src": "18941:12:2"
                }
              ]
            },
            "documentation": {
              "id": 1934,
              "nodeType": "StructuredDocumentation",
              "src": "17079:709:2",
              "text": " @dev Submits a signed set of RRs to the oracle.\n RRSETs are only accepted if they are signed with a key that is already\n trusted, or if they are self-signed, and the signing key is identified by\n a DS record that is already trusted.\n @param input The signed RR set. This is in the format described in section\n        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature\n        data, followed by a series of canonicalised RR records that the signature\n        applies to.\n @param proof The DNSKEY or DS to validate the signature against. Must Already\n        have been submitted and proved previously."
            },
            "id": 2018,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validateSignedSet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1936,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "17820:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 1935,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "17820:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1938,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "17853:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1937,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "17853:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17819:53:2"
            },
            "returnParameters": {
              "id": 1942,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1941,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "17895:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 1940,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "17895:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17894:32:2"
            },
            "scope": 2629,
            "src": "17793:1167:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2053,
              "nodeType": "Block",
              "src": "19053:154:2",
              "statements": [
                {
                  "assignments": [
                    2028
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2028,
                      "mutability": "mutable",
                      "name": "dnstype",
                      "nodeType": "VariableDeclaration",
                      "scope": 2053,
                      "src": "19063:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 2027,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "19063:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2036,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 2033,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19114:1:2",
                            "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"
                            }
                          ],
                          "expression": {
                            "id": 2031,
                            "name": "proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2022,
                            "src": "19097:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2032,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nameLength",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2781,
                          "src": "19097:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 2034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19097:19:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 2029,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2022,
                        "src": "19080:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2030,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "readUint16",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 331,
                      "src": "19080:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint16_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256) pure returns (uint16)"
                      }
                    },
                    "id": 2035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19080:37:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19063:54:2"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    },
                    "id": 2051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 2037,
                            "name": "rrsets",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 892,
                            "src": "19134:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$_$",
                              "typeString": "mapping(bytes32 => mapping(uint16 => struct DNSSECImpl.RRSet storage ref))"
                            }
                          },
                          "id": 2041,
                          "indexExpression": {
                            "arguments": [
                              {
                                "id": 2039,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2020,
                                "src": "19151:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 2038,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "19141:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 2040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19141:15:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19134:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint16_$_t_struct$_RRSet_$886_storage_$",
                            "typeString": "mapping(uint16 => struct DNSSECImpl.RRSet storage ref)"
                          }
                        },
                        "id": 2043,
                        "indexExpression": {
                          "id": 2042,
                          "name": "dnstype",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2028,
                          "src": "19158:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19134:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRSet_$886_storage",
                          "typeString": "struct DNSSECImpl.RRSet storage ref"
                        }
                      },
                      "id": 2044,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 885,
                      "src": "19134:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 2048,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2022,
                              "src": "19193:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2047,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "19183:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 2049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19183:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 2046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "19175:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes20_$",
                          "typeString": "type(bytes20)"
                        },
                        "typeName": {
                          "id": 2045,
                          "name": "bytes20",
                          "nodeType": "ElementaryTypeName",
                          "src": "19175:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19175:25:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      }
                    },
                    "src": "19134:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2026,
                  "id": 2052,
                  "nodeType": "Return",
                  "src": "19127:73:2"
                }
              ]
            },
            "id": 2054,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2020,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2054,
                  "src": "18986:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "18986:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2022,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2054,
                  "src": "19005:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2021,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "19005:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18985:39:2"
            },
            "returnParameters": {
              "id": 2026,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2025,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2054,
                  "src": "19047:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2024,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19047:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19046:6:2"
            },
            "scope": 2629,
            "src": "18966:241:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2134,
              "nodeType": "Block",
              "src": "19476:764:2",
              "statements": [
                {
                  "body": {
                    "id": 2132,
                    "nodeType": "Block",
                    "src": "19600:634:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 2084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2081,
                                  "name": "iter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2067,
                                  "src": "19673:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2082,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "class",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3023,
                                "src": "19673:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 2083,
                                "name": "DNSCLASS_IN",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 846,
                                "src": "19687:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "19673:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2080,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "19665:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19665:34:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2086,
                        "nodeType": "ExpressionStatement",
                        "src": "19665:34:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2087,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2062,
                              "src": "19717:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2088,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "19717:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2089,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19732:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19717:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2123,
                          "nodeType": "Block",
                          "src": "19792:300:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2107,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 2099,
                                        "name": "name",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2062,
                                        "src": "19950:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 2100,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "19950:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 2104,
                                            "name": "iter",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2067,
                                            "src": "19986:4:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                              "typeString": "struct RRUtils.RRIterator memory"
                                            }
                                          },
                                          "id": 2105,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "offset",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3019,
                                          "src": "19986:11:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "expression": {
                                            "id": 2101,
                                            "name": "iter",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2067,
                                            "src": "19965:4:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                              "typeString": "struct RRUtils.RRIterator memory"
                                            }
                                          },
                                          "id": 2102,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "data",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 3017,
                                          "src": "19965:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2103,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "nameLength",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2781,
                                        "src": "19965:20:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes memory,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2106,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "19965:33:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "19950:48:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 2098,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "19942:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 2108,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19942:57:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2109,
                              "nodeType": "ExpressionStatement",
                              "src": "19942:57:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 2113,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "20037:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      {
                                        "expression": {
                                          "id": 2114,
                                          "name": "iter",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2067,
                                          "src": "20040:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                            "typeString": "struct RRUtils.RRIterator memory"
                                          }
                                        },
                                        "id": 2115,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "data",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3017,
                                        "src": "20040:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 2116,
                                          "name": "iter",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2067,
                                          "src": "20051:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                            "typeString": "struct RRUtils.RRIterator memory"
                                          }
                                        },
                                        "id": 2117,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "offset",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3019,
                                        "src": "20051:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 2118,
                                          "name": "name",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2062,
                                          "src": "20064:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2119,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "20064:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 2111,
                                        "name": "name",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2062,
                                        "src": "20025:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 2112,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "equals",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 208,
                                      "src": "20025:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure returns (bool)"
                                      }
                                    },
                                    "id": 2120,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "20025:51:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 2110,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "20017:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 2121,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20017:60:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2122,
                              "nodeType": "ExpressionStatement",
                              "src": "20017:60:2"
                            }
                          ]
                        },
                        "id": 2124,
                        "nodeType": "IfStatement",
                        "src": "19714:378:2",
                        "trueBody": {
                          "id": 2097,
                          "nodeType": "Block",
                          "src": "19735:51:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 2095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2091,
                                  "name": "name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2062,
                                  "src": "19753:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 2092,
                                      "name": "iter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2067,
                                      "src": "19760:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                        "typeString": "struct RRUtils.RRIterator memory"
                                      }
                                    },
                                    "id": 2093,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "name",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3198,
                                    "src": "19760:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                                      "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 2094,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19760:11:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "src": "19753:18:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2096,
                              "nodeType": "ExpressionStatement",
                              "src": "19753:18:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 2129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2126,
                                  "name": "iter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2067,
                                  "src": "20195:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2127,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "dnstype",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3021,
                                "src": "20195:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 2128,
                                "name": "typecovered",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2059,
                                "src": "20211:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "20195:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2125,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "20187:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20187:36:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2131,
                        "nodeType": "ExpressionStatement",
                        "src": "20187:36:2"
                      }
                    ]
                  },
                  "condition": {
                    "id": 2075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "19573:12:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2072,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2067,
                          "src": "19574:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2073,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "19574:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 2074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19574:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2133,
                  "initializationExpression": {
                    "assignments": [
                      2067
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2067,
                        "mutability": "mutable",
                        "name": "iter",
                        "nodeType": "VariableDeclaration",
                        "scope": 2133,
                        "src": "19527:30:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        },
                        "typeName": {
                          "id": 2066,
                          "name": "RRUtils.RRIterator",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3030,
                          "src": "19527:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                            "typeString": "struct RRUtils.RRIterator"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2071,
                    "initialValue": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2068,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2057,
                          "src": "19560:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 2069,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3015,
                        "src": "19560:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.RRIterator memory)"
                        }
                      },
                      "id": 2070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19560:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator memory"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "19527:44:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2076,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2067,
                          "src": "19587:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2077,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "19587:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 2078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19587:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 2079,
                    "nodeType": "ExpressionStatement",
                    "src": "19587:11:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "19522:712:2"
                }
              ]
            },
            "documentation": {
              "id": 2055,
              "nodeType": "StructuredDocumentation",
              "src": "19213:143:2",
              "text": " @dev Validates a set of RRs.\n @param rrset The RR set.\n @param typecovered The type covered by the RRSIG record."
            },
            "id": 2135,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validateRRs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2057,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2135,
                  "src": "19382:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2056,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "19382:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2059,
                  "mutability": "mutable",
                  "name": "typecovered",
                  "nodeType": "VariableDeclaration",
                  "scope": 2135,
                  "src": "19414:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 2058,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "19414:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19381:52:2"
            },
            "returnParameters": {
              "id": 2063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2062,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2135,
                  "src": "19457:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2061,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "19457:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19456:19:2"
            },
            "scope": 2629,
            "src": "19361:879:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2213,
              "nodeType": "Block",
              "src": "20728:656:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2153,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "expression": {
                              "id": 2148,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2140,
                              "src": "20863:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 2149,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signerName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2895,
                            "src": "20863:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "20863:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 2151,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2138,
                            "src": "20890:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "20890:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "20863:38:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2147,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "20855:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20855:47:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2155,
                  "nodeType": "ExpressionStatement",
                  "src": "20855:47:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 2160,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20944:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "id": 2161,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2138,
                            "src": "20947:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2162,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2138,
                                "src": "20953:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2163,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "20953:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "expression": {
                                  "id": 2164,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2140,
                                  "src": "20967:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                "id": 2165,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "signerName",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2895,
                                "src": "20967:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "20967:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20953:37:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "expression": {
                              "id": 2157,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2140,
                              "src": "20920:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 2158,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signerName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2895,
                            "src": "20920:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "equals",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 240,
                          "src": "20920:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256,bytes memory,uint256) pure returns (bool)"
                          }
                        },
                        "id": 2168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20920:71:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2156,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "20912:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20912:80:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2170,
                  "nodeType": "ExpressionStatement",
                  "src": "20912:80:2"
                },
                {
                  "assignments": [
                    2174
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2174,
                      "mutability": "mutable",
                      "name": "proofRR",
                      "nodeType": "VariableDeclaration",
                      "scope": 2213,
                      "src": "21003:33:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator"
                      },
                      "typeName": {
                        "id": 2173,
                        "name": "RRUtils.RRIterator",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3030,
                        "src": "21003:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2179,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 2177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21056:1:2",
                        "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"
                        }
                      ],
                      "expression": {
                        "id": 2175,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2144,
                        "src": "21039:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "iterateRRs",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3057,
                      "src": "21039:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256) pure returns (struct RRUtils.RRIterator memory)"
                      }
                    },
                    "id": 2178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21039:19:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                      "typeString": "struct RRUtils.RRIterator memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21003:55:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 2183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2180,
                        "name": "proofRR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2174,
                        "src": "21099:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator memory"
                        }
                      },
                      "id": 2181,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "dnstype",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3021,
                      "src": "21099:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 2182,
                      "name": "DNSTYPE_DS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 858,
                      "src": "21118:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "21099:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "id": 2196,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2193,
                          "name": "proofRR",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2174,
                          "src": "21208:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2194,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "dnstype",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3021,
                        "src": "21208:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 2195,
                        "name": "DNSTYPE_DNSKEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 867,
                        "src": "21227:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "21208:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 2210,
                      "nodeType": "Block",
                      "src": "21323:55:2",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "hexValue": "4e6f2076616c69642070726f6f6620666f756e64",
                                "id": 2207,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21344:22:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d",
                                  "typeString": "literal_string \"No valid proof found\""
                                },
                                "value": "No valid proof found"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_89cd18b41d1090ca2df015e80f663c90777bc556f4d3a0c572e3ad7262b44a7d",
                                  "typeString": "literal_string \"No valid proof found\""
                                }
                              ],
                              "id": 2206,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -19,
                                -19
                              ],
                              "referencedDeclaration": -19,
                              "src": "21337:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (string memory) pure"
                              }
                            },
                            "id": 2208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21337:30:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2209,
                          "nodeType": "ExpressionStatement",
                          "src": "21337:30:2"
                        }
                      ]
                    },
                    "id": 2211,
                    "nodeType": "IfStatement",
                    "src": "21204:174:2",
                    "trueBody": {
                      "id": 2205,
                      "nodeType": "Block",
                      "src": "21243:74:2",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 2199,
                                    "name": "rrset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2140,
                                    "src": "21284:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                      "typeString": "struct RRUtils.SignedSet memory"
                                    }
                                  },
                                  {
                                    "id": 2200,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2142,
                                    "src": "21291:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                      "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                    }
                                  },
                                  {
                                    "id": 2201,
                                    "name": "proofRR",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2174,
                                    "src": "21297:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                      "typeString": "struct RRUtils.RRIterator memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                      "typeString": "struct RRUtils.SignedSet memory"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                      "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                      "typeString": "struct RRUtils.RRIterator memory"
                                    }
                                  ],
                                  "id": 2198,
                                  "name": "verifyWithKnownKey",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2284,
                                  "src": "21265:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$",
                                    "typeString": "function (struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory,struct RRUtils.RRIterator memory) view returns (bool)"
                                  }
                                },
                                "id": 2202,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21265:40:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 2197,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "src": "21257:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                "typeString": "function (bool) pure"
                              }
                            },
                            "id": 2203,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21257:49:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2204,
                          "nodeType": "ExpressionStatement",
                          "src": "21257:49:2"
                        }
                      ]
                    }
                  },
                  "id": 2212,
                  "nodeType": "IfStatement",
                  "src": "21095:283:2",
                  "trueBody": {
                    "id": 2192,
                    "nodeType": "Block",
                    "src": "21130:68:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2186,
                                  "name": "rrset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2140,
                                  "src": "21165:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  }
                                },
                                {
                                  "id": 2187,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2142,
                                  "src": "21172:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                    "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                  }
                                },
                                {
                                  "id": 2188,
                                  "name": "proofRR",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2174,
                                  "src": "21178:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                    "typeString": "struct RRUtils.SignedSet memory"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                    "typeString": "struct DNSSEC.RRSetWithSignature memory"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                ],
                                "id": 2185,
                                "name": "verifyWithDS",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2426,
                                "src": "21152:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory,struct RRUtils.RRIterator memory) view returns (bool)"
                                }
                              },
                              "id": 2189,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21152:34:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2184,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "21144:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21144:43:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2191,
                        "nodeType": "ExpressionStatement",
                        "src": "21144:43:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 2136,
              "nodeType": "StructuredDocumentation",
              "src": "20246:335:2",
              "text": " @dev Performs signature verification.\n Throws or reverts if unable to verify the record.\n @param name The name of the RRSIG record, in DNS label-sequence format.\n @param data The original data to verify.\n @param proof A DS or DNSKEY record that's already verified by the oracle."
            },
            "id": 2214,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifySignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2138,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2214,
                  "src": "20611:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2137,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20611:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2140,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2214,
                  "src": "20630:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2139,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "20630:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2142,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2214,
                  "src": "20662:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 2141,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "20662:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2144,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2214,
                  "src": "20694:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2143,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20694:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20610:103:2"
            },
            "returnParameters": {
              "id": 2146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20728:0:2"
            },
            "scope": 2629,
            "src": "20586:798:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2283,
              "nodeType": "Block",
              "src": "21896:506:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 2231,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "22012:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            "id": 2232,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signerName",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2895,
                            "src": "22012:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 2227,
                                "name": "proof",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2221,
                                "src": "21992:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                  "typeString": "struct RRUtils.RRIterator memory"
                                }
                              },
                              "id": 2228,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "name",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3198,
                              "src": "21992:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                                "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 2229,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21992:12:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "equals",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 294,
                          "src": "21992:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 2233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21992:37:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2226,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21984:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21984:46:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2235,
                  "nodeType": "ExpressionStatement",
                  "src": "21984:46:2"
                },
                {
                  "body": {
                    "id": 2281,
                    "nodeType": "Block",
                    "src": "22075:321:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 2249,
                                    "name": "rrset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2217,
                                    "src": "22117:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                      "typeString": "struct RRUtils.SignedSet memory"
                                    }
                                  },
                                  "id": 2250,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "signerName",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2895,
                                  "src": "22117:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 2245,
                                      "name": "proof",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2221,
                                      "src": "22097:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                        "typeString": "struct RRUtils.RRIterator memory"
                                      }
                                    },
                                    "id": 2246,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "name",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3198,
                                    "src": "22097:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                                      "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 2247,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "22097:12:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2248,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "equals",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 294,
                                "src": "22097:19:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,bytes memory) pure returns (bool)"
                                }
                              },
                              "id": 2251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22097:37:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2244,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "22089:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22089:46:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2253,
                        "nodeType": "ExpressionStatement",
                        "src": "22089:46:2"
                      },
                      {
                        "assignments": [
                          2255
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2255,
                            "mutability": "mutable",
                            "name": "keyrdata",
                            "nodeType": "VariableDeclaration",
                            "scope": 2281,
                            "src": "22149:21:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2254,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "22149:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2259,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 2256,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2221,
                              "src": "22173:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              }
                            },
                            "id": 2257,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rdata",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3219,
                            "src": "22173:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                              "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 2258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22173:13:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "22149:37:2"
                      },
                      {
                        "assignments": [
                          2263
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2263,
                            "mutability": "mutable",
                            "name": "dnskey",
                            "nodeType": "VariableDeclaration",
                            "scope": 2281,
                            "src": "22200:28:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                              "typeString": "struct RRUtils.DNSKEY"
                            },
                            "typeName": {
                              "id": 2262,
                              "name": "RRUtils.DNSKEY",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3240,
                              "src": "22200:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_storage_ptr",
                                "typeString": "struct RRUtils.DNSKEY"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2270,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 2266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22251:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "id": 2267,
                                "name": "keyrdata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2255,
                                "src": "22254:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2268,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "22254:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 2264,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2255,
                              "src": "22231:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "readDNSKEY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3299,
                            "src": "22231:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_struct$_DNSKEY_$3240_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (struct RRUtils.DNSKEY memory)"
                            }
                          },
                          "id": 2269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22231:39:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                            "typeString": "struct RRUtils.DNSKEY memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "22200:70:2"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 2272,
                              "name": "dnskey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2263,
                              "src": "22310:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              }
                            },
                            {
                              "id": 2273,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2255,
                              "src": "22318:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 2274,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "22328:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            {
                              "id": 2275,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2219,
                              "src": "22335:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            ],
                            "id": 2271,
                            "name": "verifySignatureWithKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2352,
                            "src": "22287:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_DNSKEY_$3240_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct RRUtils.DNSKEY memory,bytes memory,struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory) view returns (bool)"
                            }
                          },
                          "id": 2276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22287:53:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2280,
                        "nodeType": "IfStatement",
                        "src": "22284:102:2",
                        "trueBody": {
                          "id": 2279,
                          "nodeType": "Block",
                          "src": "22342:44:2",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 2277,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "22367:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 2225,
                              "id": 2278,
                              "nodeType": "Return",
                              "src": "22360:11:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "id": 2239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "22046:13:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2236,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2221,
                          "src": "22047:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2237,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "22047:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 2238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22047:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2282,
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2240,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2221,
                          "src": "22061:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2241,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "22061:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 2242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22061:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 2243,
                    "nodeType": "ExpressionStatement",
                    "src": "22061:12:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "22040:356:2"
                }
              ]
            },
            "documentation": {
              "id": 2215,
              "nodeType": "StructuredDocumentation",
              "src": "21390:348:2",
              "text": " @dev Attempts to verify a signed RRSET against an already known public key.\n @param rrset The signed set to verify.\n @param data The original data the signed set was read from.\n @param proof The serialized DS or DNSKEY record to use as proof.\n @return True if the RRSET could be verified, false otherwise."
            },
            "id": 2284,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyWithKnownKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2217,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2284,
                  "src": "21771:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2216,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "21771:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2219,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2284,
                  "src": "21803:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 2218,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "21803:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2221,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2284,
                  "src": "21835:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                    "typeString": "struct RRUtils.RRIterator"
                  },
                  "typeName": {
                    "id": 2220,
                    "name": "RRUtils.RRIterator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3030,
                    "src": "21835:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                      "typeString": "struct RRUtils.RRIterator"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21770:97:2"
            },
            "returnParameters": {
              "id": 2225,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2224,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2284,
                  "src": "21890:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2223,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21890:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21889:6:2"
            },
            "scope": 2629,
            "src": "21743:659:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2351,
              "nodeType": "Block",
              "src": "22951:990:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 2301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2298,
                        "name": "dnskey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2287,
                        "src": "23098:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                          "typeString": "struct RRUtils.DNSKEY memory"
                        }
                      },
                      "id": 2299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "protocol",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3235,
                      "src": "23098:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "33",
                      "id": 2300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23117:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "src": "23098:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2305,
                  "nodeType": "IfStatement",
                  "src": "23095:62:2",
                  "trueBody": {
                    "id": 2304,
                    "nodeType": "Block",
                    "src": "23120:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23141:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2297,
                        "id": 2303,
                        "nodeType": "Return",
                        "src": "23134:12:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 2310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2306,
                        "name": "dnskey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2287,
                        "src": "23371:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                          "typeString": "struct RRUtils.DNSKEY memory"
                        }
                      },
                      "id": 2307,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "algorithm",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3237,
                      "src": "23371:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2308,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2291,
                        "src": "23391:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 2309,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "algorithm",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2883,
                      "src": "23391:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "23371:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2314,
                  "nodeType": "IfStatement",
                  "src": "23368:77:2",
                  "trueBody": {
                    "id": 2313,
                    "nodeType": "Block",
                    "src": "23408:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2311,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23429:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2297,
                        "id": 2312,
                        "nodeType": "Return",
                        "src": "23422:12:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2316
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2316,
                      "mutability": "mutable",
                      "name": "computedkeytag",
                      "nodeType": "VariableDeclaration",
                      "scope": 2351,
                      "src": "23454:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 2315,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "23454:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2320,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2318,
                        "name": "keyrdata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "23492:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2317,
                      "name": "computeKeytag",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2628,
                      "src": "23478:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint16_$",
                        "typeString": "function (bytes memory) pure returns (uint16)"
                      }
                    },
                    "id": 2319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23478:23:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23454:47:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 2324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2321,
                      "name": "computedkeytag",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2316,
                      "src": "23515:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2322,
                        "name": "rrset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2291,
                        "src": "23533:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                          "typeString": "struct RRUtils.SignedSet memory"
                        }
                      },
                      "id": 2323,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keytag",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2893,
                      "src": "23533:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "23515:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2328,
                  "nodeType": "IfStatement",
                  "src": "23511:73:2",
                  "trueBody": {
                    "id": 2327,
                    "nodeType": "Block",
                    "src": "23547:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23568:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2297,
                        "id": 2326,
                        "nodeType": "Return",
                        "src": "23561:12:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2329,
                          "name": "dnskey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2287,
                          "src": "23772:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                            "typeString": "struct RRUtils.DNSKEY memory"
                          }
                        },
                        "id": 2330,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "flags",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3233,
                        "src": "23772:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "id": 2331,
                        "name": "DNSKEY_FLAG_ZONEKEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 873,
                        "src": "23787:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23772:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 2333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23810:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23772:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2338,
                  "nodeType": "IfStatement",
                  "src": "23768:82:2",
                  "trueBody": {
                    "id": 2337,
                    "nodeType": "Block",
                    "src": "23813:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23834:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2297,
                        "id": 2336,
                        "nodeType": "Return",
                        "src": "23827:12:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2344,
                        "name": "keyrdata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "23903:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 2345,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2293,
                          "src": "23913:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        "id": 2346,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 737,
                        "src": "23913:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 2347,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2293,
                          "src": "23925:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                            "typeString": "struct DNSSEC.RRSetWithSignature memory"
                          }
                        },
                        "id": 2348,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sig",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 739,
                        "src": "23925:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 2339,
                          "name": "algorithms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 896,
                          "src": "23867:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Algorithm_$3863_$",
                            "typeString": "mapping(uint8 => contract Algorithm)"
                          }
                        },
                        "id": 2342,
                        "indexExpression": {
                          "expression": {
                            "id": 2340,
                            "name": "dnskey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2287,
                            "src": "23878:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                              "typeString": "struct RRUtils.DNSKEY memory"
                            }
                          },
                          "id": 2341,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "algorithm",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3237,
                          "src": "23878:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23867:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Algorithm_$3863",
                          "typeString": "contract Algorithm"
                        }
                      },
                      "id": 2343,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "verify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3862,
                      "src": "23867:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory,bytes memory) view external returns (bool)"
                      }
                    },
                    "id": 2349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23867:67:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2297,
                  "id": 2350,
                  "nodeType": "Return",
                  "src": "23860:74:2"
                }
              ]
            },
            "documentation": {
              "id": 2285,
              "nodeType": "StructuredDocumentation",
              "src": "22408:332:2",
              "text": " @dev Attempts to verify some data using a provided key and a signature.\n @param dnskey The dns key record to verify the signature with.\n @param rrset The signed RRSET being verified.\n @param data The original data `rrset` was decoded from.\n @return True iff the key verifies the signature."
            },
            "id": 2352,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifySignatureWithKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2287,
                  "mutability": "mutable",
                  "name": "dnskey",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22777:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                    "typeString": "struct RRUtils.DNSKEY"
                  },
                  "typeName": {
                    "id": 2286,
                    "name": "RRUtils.DNSKEY",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3240,
                    "src": "22777:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DNSKEY_$3240_storage_ptr",
                      "typeString": "struct RRUtils.DNSKEY"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2289,
                  "mutability": "mutable",
                  "name": "keyrdata",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22807:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "22807:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2291,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22830:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2290,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "22830:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2293,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22862:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 2292,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "22862:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22776:117:2"
            },
            "returnParameters": {
              "id": 2297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2296,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2352,
                  "src": "22941:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2295,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22941:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22940:6:2"
            },
            "scope": 2629,
            "src": "22745:1196:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2425,
              "nodeType": "Block",
              "src": "24492:551:2",
              "statements": [
                {
                  "body": {
                    "id": 2421,
                    "nodeType": "Block",
                    "src": "24579:436:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 2384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2381,
                                  "name": "iter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2367,
                                  "src": "24601:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2382,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "dnstype",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3021,
                                "src": "24601:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 2383,
                                "name": "DNSTYPE_DNSKEY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 867,
                                "src": "24617:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "24601:30:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2380,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "24593:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24593:39:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2386,
                        "nodeType": "ExpressionStatement",
                        "src": "24593:39:2"
                      },
                      {
                        "assignments": [
                          2388
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2388,
                            "mutability": "mutable",
                            "name": "keyrdata",
                            "nodeType": "VariableDeclaration",
                            "scope": 2421,
                            "src": "24646:21:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2387,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "24646:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2392,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 2389,
                              "name": "iter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2367,
                              "src": "24670:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              }
                            },
                            "id": 2390,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rdata",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3219,
                            "src": "24670:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                              "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 2391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24670:12:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24646:36:2"
                      },
                      {
                        "assignments": [
                          2396
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2396,
                            "mutability": "mutable",
                            "name": "dnskey",
                            "nodeType": "VariableDeclaration",
                            "scope": 2421,
                            "src": "24696:28:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                              "typeString": "struct RRUtils.DNSKEY"
                            },
                            "typeName": {
                              "id": 2395,
                              "name": "RRUtils.DNSKEY",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3240,
                              "src": "24696:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_storage_ptr",
                                "typeString": "struct RRUtils.DNSKEY"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2403,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 2399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "24747:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "id": 2400,
                                "name": "keyrdata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2388,
                                "src": "24750:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "24750:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 2397,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2388,
                              "src": "24727:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2398,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "readDNSKEY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3299,
                            "src": "24727:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_struct$_DNSKEY_$3240_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (struct RRUtils.DNSKEY memory)"
                            }
                          },
                          "id": 2402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24727:39:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                            "typeString": "struct RRUtils.DNSKEY memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24696:70:2"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 2405,
                              "name": "dnskey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2396,
                              "src": "24807:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              }
                            },
                            {
                              "id": 2406,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2388,
                              "src": "24815:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 2407,
                              "name": "rrset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2355,
                              "src": "24825:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              }
                            },
                            {
                              "id": 2408,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2357,
                              "src": "24832:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                                "typeString": "struct RRUtils.SignedSet memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                                "typeString": "struct DNSSEC.RRSetWithSignature memory"
                              }
                            ],
                            "id": 2404,
                            "name": "verifySignatureWithKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2352,
                            "src": "24784:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_DNSKEY_$3240_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_SignedSet_$2900_memory_ptr_$_t_struct$_RRSetWithSignature_$740_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (struct RRUtils.DNSKEY memory,bytes memory,struct RRUtils.SignedSet memory,struct DNSSEC.RRSetWithSignature memory) view returns (bool)"
                            }
                          },
                          "id": 2409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24784:53:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2420,
                        "nodeType": "IfStatement",
                        "src": "24780:225:2",
                        "trueBody": {
                          "id": 2419,
                          "nodeType": "Block",
                          "src": "24839:166:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "id": 2411,
                                        "name": "iter",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2367,
                                        "src": "24953:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                          "typeString": "struct RRUtils.RRIterator memory"
                                        }
                                      },
                                      "id": 2412,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "name",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3198,
                                      "src": "24953:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                                        "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 2413,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "24953:11:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "id": 2414,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2359,
                                    "src": "24966:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                      "typeString": "struct RRUtils.RRIterator memory"
                                    }
                                  },
                                  {
                                    "id": 2415,
                                    "name": "dnskey",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2396,
                                    "src": "24973:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                      "typeString": "struct RRUtils.DNSKEY memory"
                                    }
                                  },
                                  {
                                    "id": 2416,
                                    "name": "keyrdata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2388,
                                    "src": "24981:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                      "typeString": "struct RRUtils.RRIterator memory"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                      "typeString": "struct RRUtils.DNSKEY memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 2410,
                                  "name": "verifyKeyWithDS",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2535,
                                  "src": "24937:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_struct$_RRIterator_$3030_memory_ptr_$_t_struct$_DNSKEY_$3240_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                                    "typeString": "function (bytes memory,struct RRUtils.RRIterator memory,struct RRUtils.DNSKEY memory,bytes memory) view returns (bool)"
                                  }
                                },
                                "id": 2417,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24937:53:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "functionReturnParameters": 2363,
                              "id": 2418,
                              "nodeType": "Return",
                              "src": "24930:60:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "id": 2375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "24552:12:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2372,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2367,
                          "src": "24553:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2373,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "24553:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 2374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24553:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2422,
                  "initializationExpression": {
                    "assignments": [
                      2367
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2367,
                        "mutability": "mutable",
                        "name": "iter",
                        "nodeType": "VariableDeclaration",
                        "scope": 2422,
                        "src": "24506:30:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                          "typeString": "struct RRUtils.RRIterator"
                        },
                        "typeName": {
                          "id": 2366,
                          "name": "RRUtils.RRIterator",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3030,
                          "src": "24506:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                            "typeString": "struct RRUtils.RRIterator"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2371,
                    "initialValue": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2368,
                          "name": "rrset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2355,
                          "src": "24539:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                            "typeString": "struct RRUtils.SignedSet memory"
                          }
                        },
                        "id": 2369,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rrs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3015,
                        "src": "24539:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_SignedSet_$2900_memory_ptr_$returns$_t_struct$_RRIterator_$3030_memory_ptr_$bound_to$_t_struct$_SignedSet_$2900_memory_ptr_$",
                          "typeString": "function (struct RRUtils.SignedSet memory) pure returns (struct RRUtils.RRIterator memory)"
                        }
                      },
                      "id": 2370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24539:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                        "typeString": "struct RRUtils.RRIterator memory"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24506:44:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2376,
                          "name": "iter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2367,
                          "src": "24566:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2377,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "24566:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 2378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24566:11:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 2379,
                    "nodeType": "ExpressionStatement",
                    "src": "24566:11:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "24502:513:2"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 2423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "25031:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 2363,
                  "id": 2424,
                  "nodeType": "Return",
                  "src": "25024:12:2"
                }
              ]
            },
            "documentation": {
              "id": 2353,
              "nodeType": "StructuredDocumentation",
              "src": "23947:393:2",
              "text": " @dev Attempts to verify a signed RRSET against an already known hash. This function assumes\n      that the record \n @param rrset The signed set to verify.\n @param data The original data the signed set was read from.\n @param proof The serialized DS or DNSKEY record to use as proof.\n @return True if the RRSET could be verified, false otherwise."
            },
            "id": 2426,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyWithDS",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2355,
                  "mutability": "mutable",
                  "name": "rrset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2426,
                  "src": "24367:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SignedSet_$2900_memory_ptr",
                    "typeString": "struct RRUtils.SignedSet"
                  },
                  "typeName": {
                    "id": 2354,
                    "name": "RRUtils.SignedSet",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2900,
                    "src": "24367:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SignedSet_$2900_storage_ptr",
                      "typeString": "struct RRUtils.SignedSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2357,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2426,
                  "src": "24399:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRSetWithSignature_$740_memory_ptr",
                    "typeString": "struct DNSSEC.RRSetWithSignature"
                  },
                  "typeName": {
                    "id": 2356,
                    "name": "RRSetWithSignature",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 740,
                    "src": "24399:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRSetWithSignature_$740_storage_ptr",
                      "typeString": "struct DNSSEC.RRSetWithSignature"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2359,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 2426,
                  "src": "24431:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                    "typeString": "struct RRUtils.RRIterator"
                  },
                  "typeName": {
                    "id": 2358,
                    "name": "RRUtils.RRIterator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3030,
                    "src": "24431:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                      "typeString": "struct RRUtils.RRIterator"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24366:97:2"
            },
            "returnParameters": {
              "id": 2363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2362,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2426,
                  "src": "24486:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2361,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24486:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24485:6:2"
            },
            "scope": 2629,
            "src": "24345:698:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2534,
              "nodeType": "Block",
              "src": "25580:735:2",
              "statements": [
                {
                  "assignments": [
                    2441
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2441,
                      "mutability": "mutable",
                      "name": "keytag",
                      "nodeType": "VariableDeclaration",
                      "scope": 2534,
                      "src": "25590:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 2440,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "25590:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2445,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2443,
                        "name": "keyrdata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2435,
                        "src": "25620:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2442,
                      "name": "computeKeytag",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2628,
                      "src": "25606:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint16_$",
                        "typeString": "function (bytes memory) pure returns (uint16)"
                      }
                    },
                    "id": 2444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25606:23:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25590:39:2"
                },
                {
                  "body": {
                    "id": 2530,
                    "nodeType": "Block",
                    "src": "25675:612:2",
                    "statements": [
                      {
                        "assignments": [
                          2455
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2455,
                            "mutability": "mutable",
                            "name": "rdata",
                            "nodeType": "VariableDeclaration",
                            "scope": 2530,
                            "src": "25689:18:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2454,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "25689:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2459,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 2456,
                              "name": "dsrrs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2431,
                              "src": "25710:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                "typeString": "struct RRUtils.RRIterator memory"
                              }
                            },
                            "id": 2457,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rdata",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3219,
                            "src": "25710:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                              "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 2458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25710:13:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25689:34:2"
                      },
                      {
                        "assignments": [
                          2463
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2463,
                            "mutability": "mutable",
                            "name": "ds",
                            "nodeType": "VariableDeclaration",
                            "scope": 2530,
                            "src": "25737:20:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                              "typeString": "struct RRUtils.DS"
                            },
                            "typeName": {
                              "id": 2462,
                              "name": "RRUtils.DS",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3320,
                              "src": "25737:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DS_$3320_storage_ptr",
                                "typeString": "struct RRUtils.DS"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2475,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2467,
                                "name": "dsrrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2431,
                                "src": "25778:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                  "typeString": "struct RRUtils.RRIterator memory"
                                }
                              },
                              "id": 2468,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rdataOffset",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3027,
                              "src": "25778:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2469,
                                  "name": "dsrrs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2431,
                                  "src": "25797:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2470,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "nextOffset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3029,
                                "src": "25797:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "expression": {
                                  "id": 2471,
                                  "name": "dsrrs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2431,
                                  "src": "25816:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                    "typeString": "struct RRUtils.RRIterator memory"
                                  }
                                },
                                "id": 2472,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rdataOffset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3027,
                                "src": "25816:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25797:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 2464,
                                "name": "dsrrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2431,
                                "src": "25760:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                                  "typeString": "struct RRUtils.RRIterator memory"
                                }
                              },
                              "id": 2465,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3017,
                              "src": "25760:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2466,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "readDS",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3379,
                            "src": "25760:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_struct$_DS_$3320_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (struct RRUtils.DS memory)"
                            }
                          },
                          "id": 2474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25760:74:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                            "typeString": "struct RRUtils.DS memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25737:97:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "id": 2479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2476,
                              "name": "ds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2463,
                              "src": "25851:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                                "typeString": "struct RRUtils.DS memory"
                              }
                            },
                            "id": 2477,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "keytag",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3313,
                            "src": "25851:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 2478,
                            "name": "keytag",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2441,
                            "src": "25864:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "25851:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2482,
                        "nodeType": "IfStatement",
                        "src": "25848:65:2",
                        "trueBody": {
                          "id": 2481,
                          "nodeType": "Block",
                          "src": "25872:41:2",
                          "statements": [
                            {
                              "id": 2480,
                              "nodeType": "Continue",
                              "src": "25890:8:2"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 2487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2483,
                              "name": "ds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2463,
                              "src": "25930:2:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                                "typeString": "struct RRUtils.DS memory"
                              }
                            },
                            "id": 2484,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "algorithm",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3315,
                            "src": "25930:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "id": 2485,
                              "name": "dnskey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2433,
                              "src": "25946:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                                "typeString": "struct RRUtils.DNSKEY memory"
                              }
                            },
                            "id": 2486,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "algorithm",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3237,
                            "src": "25946:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "25930:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2490,
                        "nodeType": "IfStatement",
                        "src": "25926:79:2",
                        "trueBody": {
                          "id": 2489,
                          "nodeType": "Block",
                          "src": "25964:41:2",
                          "statements": [
                            {
                              "id": 2488,
                              "nodeType": "Continue",
                              "src": "25982:8:2"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          2494
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2494,
                            "mutability": "mutable",
                            "name": "buf",
                            "nodeType": "VariableDeclaration",
                            "scope": 2530,
                            "src": "26019:24:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                              "typeString": "struct Buffer.buffer"
                            },
                            "typeName": {
                              "id": 2493,
                              "name": "Buffer.buffer",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5974,
                              "src": "26019:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$5974_storage_ptr",
                                "typeString": "struct Buffer.buffer"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2495,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "26019:24:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2499,
                                  "name": "keyname",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2429,
                                  "src": "26066:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2500,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "26066:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "expression": {
                                  "id": 2501,
                                  "name": "keyrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2435,
                                  "src": "26083:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2502,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "26083:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "26066:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 2496,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2494,
                              "src": "26057:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 2498,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "init",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6010,
                            "src": "26057:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$5974_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$5974_memory_ptr_$bound_to$_t_struct$_buffer_$5974_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,uint256) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 2504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26057:42:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 2505,
                        "nodeType": "ExpressionStatement",
                        "src": "26057:42:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2509,
                              "name": "keyname",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2429,
                              "src": "26124:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 2506,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2494,
                              "src": "26113:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 2508,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "append",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6216,
                            "src": "26113:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$5974_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$5974_memory_ptr_$bound_to$_t_struct$_buffer_$5974_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 2510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26113:19:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 2511,
                        "nodeType": "ExpressionStatement",
                        "src": "26113:19:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2515,
                              "name": "keyrdata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2435,
                              "src": "26157:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 2512,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2494,
                              "src": "26146:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 2514,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "append",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6216,
                            "src": "26146:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$5974_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$5974_memory_ptr_$bound_to$_t_struct$_buffer_$5974_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 2516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26146:20:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 2517,
                        "nodeType": "ExpressionStatement",
                        "src": "26146:20:2"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2519,
                                "name": "ds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2463,
                                "src": "26197:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                                  "typeString": "struct RRUtils.DS memory"
                                }
                              },
                              "id": 2520,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "digestType",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3317,
                              "src": "26197:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "expression": {
                                "id": 2521,
                                "name": "buf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2494,
                                "src": "26212:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_buffer_$5974_memory_ptr",
                                  "typeString": "struct Buffer.buffer memory"
                                }
                              },
                              "id": 2522,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "buf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5971,
                              "src": "26212:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 2523,
                                "name": "ds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2463,
                                "src": "26221:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_DS_$3320_memory_ptr",
                                  "typeString": "struct RRUtils.DS memory"
                                }
                              },
                              "id": 2524,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "digest",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3319,
                              "src": "26221:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 2518,
                            "name": "verifyDSHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2571,
                            "src": "26184:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint8_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint8,bytes memory,bytes memory) view returns (bool)"
                            }
                          },
                          "id": 2525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26184:47:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2529,
                        "nodeType": "IfStatement",
                        "src": "26180:97:2",
                        "trueBody": {
                          "id": 2528,
                          "nodeType": "Block",
                          "src": "26233:44:2",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 2526,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "26258:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 2439,
                              "id": 2527,
                              "nodeType": "Return",
                              "src": "26251:11:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "id": 2449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "25646:13:2",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2446,
                          "name": "dsrrs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2431,
                          "src": "25647:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2447,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "done",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3073,
                        "src": "25647:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure returns (bool)"
                        }
                      },
                      "id": 2448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25647:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2531,
                  "loopExpression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 2450,
                          "name": "dsrrs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2431,
                          "src": "25661:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                            "typeString": "struct RRUtils.RRIterator memory"
                          }
                        },
                        "id": 2451,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3176,
                        "src": "25661:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RRIterator_$3030_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3030_memory_ptr_$",
                          "typeString": "function (struct RRUtils.RRIterator memory) pure"
                        }
                      },
                      "id": 2452,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25661:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 2453,
                    "nodeType": "ExpressionStatement",
                    "src": "25661:12:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "25639:648:2"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 2532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "26303:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 2439,
                  "id": 2533,
                  "nodeType": "Return",
                  "src": "26296:12:2"
                }
              ]
            },
            "documentation": {
              "id": 2427,
              "nodeType": "StructuredDocumentation",
              "src": "25049:352:2",
              "text": " @dev Attempts to verify a key using DS records.\n @param keyname The DNS name of the key, in DNS label-sequence format.\n @param dsrrs The DS records to use in verification.\n @param dnskey The dnskey to verify.\n @param keyrdata The RDATA section of the key.\n @return True if a DS record verifies this key."
            },
            "id": 2535,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyKeyWithDS",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2429,
                  "mutability": "mutable",
                  "name": "keyname",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25431:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2428,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "25431:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2431,
                  "mutability": "mutable",
                  "name": "dsrrs",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25453:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RRIterator_$3030_memory_ptr",
                    "typeString": "struct RRUtils.RRIterator"
                  },
                  "typeName": {
                    "id": 2430,
                    "name": "RRUtils.RRIterator",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3030,
                    "src": "25453:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RRIterator_$3030_storage_ptr",
                      "typeString": "struct RRUtils.RRIterator"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2433,
                  "mutability": "mutable",
                  "name": "dnskey",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25486:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_DNSKEY_$3240_memory_ptr",
                    "typeString": "struct RRUtils.DNSKEY"
                  },
                  "typeName": {
                    "id": 2432,
                    "name": "RRUtils.DNSKEY",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3240,
                    "src": "25486:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_DNSKEY_$3240_storage_ptr",
                      "typeString": "struct RRUtils.DNSKEY"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2435,
                  "mutability": "mutable",
                  "name": "keyrdata",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25516:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2434,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "25516:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25430:108:2"
            },
            "returnParameters": {
              "id": 2439,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2438,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2535,
                  "src": "25570:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2437,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25570:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25569:6:2"
            },
            "scope": 2629,
            "src": "25406:909:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2570,
              "nodeType": "Block",
              "src": "26718:158:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 2549,
                            "name": "digests",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 900,
                            "src": "26740:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
                              "typeString": "mapping(uint8 => contract Digest)"
                            }
                          },
                          "id": 2551,
                          "indexExpression": {
                            "id": 2550,
                            "name": "digesttype",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2538,
                            "src": "26748:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "26740:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Digest_$5741",
                            "typeString": "contract Digest"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Digest_$5741",
                            "typeString": "contract Digest"
                          }
                        ],
                        "id": 2548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "26732:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2547,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "26732:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26732:28:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 2555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26772:1:2",
                          "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": 2554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "26764:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2553,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "26764:7:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26764:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "26732:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2561,
                  "nodeType": "IfStatement",
                  "src": "26728:85:2",
                  "trueBody": {
                    "id": 2560,
                    "nodeType": "Block",
                    "src": "26776:37:2",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26797:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2546,
                        "id": 2559,
                        "nodeType": "Return",
                        "src": "26790:12:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2566,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2540,
                        "src": "26856:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 2567,
                        "name": "digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2542,
                        "src": "26862:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 2562,
                          "name": "digests",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 900,
                          "src": "26829:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_contract$_Digest_$5741_$",
                            "typeString": "mapping(uint8 => contract Digest)"
                          }
                        },
                        "id": 2564,
                        "indexExpression": {
                          "id": 2563,
                          "name": "digesttype",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2538,
                          "src": "26837:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26829:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Digest_$5741",
                          "typeString": "contract Digest"
                        }
                      },
                      "id": 2565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "verify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5740,
                      "src": "26829:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory) pure external returns (bool)"
                      }
                    },
                    "id": 2568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26829:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2546,
                  "id": 2569,
                  "nodeType": "Return",
                  "src": "26822:47:2"
                }
              ]
            },
            "documentation": {
              "id": 2536,
              "nodeType": "StructuredDocumentation",
              "src": "26321:283:2",
              "text": " @dev Attempts to verify a DS record's hash value against some data.\n @param digesttype The digest ID from the DS record.\n @param data The data to digest.\n @param digest The digest data to check against.\n @return True iff the digest matches."
            },
            "id": 2571,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verifyDSHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2538,
                  "mutability": "mutable",
                  "name": "digesttype",
                  "nodeType": "VariableDeclaration",
                  "scope": 2571,
                  "src": "26631:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 2537,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "26631:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2540,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2571,
                  "src": "26649:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2539,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "26649:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2542,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 2571,
                  "src": "26668:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2541,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "26668:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26630:58:2"
            },
            "returnParameters": {
              "id": 2546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2545,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2571,
                  "src": "26712:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2544,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "26712:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26711:6:2"
            },
            "scope": 2629,
            "src": "26609:267:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2627,
              "nodeType": "Block",
              "src": "27114:206:2",
              "statements": [
                {
                  "assignments": [
                    2580
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2580,
                      "mutability": "mutable",
                      "name": "ac",
                      "nodeType": "VariableDeclaration",
                      "scope": 2627,
                      "src": "27124:7:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2579,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "27124:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2581,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27124:7:2"
                },
                {
                  "body": {
                    "id": 2615,
                    "nodeType": "Block",
                    "src": "27180:94:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 2613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2593,
                            "name": "ac",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2580,
                            "src": "27194:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2598,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2596,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2594,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2583,
                                  "src": "27200:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2595,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "27204:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "27200:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2597,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27209:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "27200:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "arguments": [
                                {
                                  "id": 2610,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2583,
                                  "src": "27261:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 2608,
                                  "name": "data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2574,
                                  "src": "27246:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "readUint8",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 311,
                                "src": "27246:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                                }
                              },
                              "id": 2611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "27246:17:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "id": 2612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "27200:63:2",
                            "trueExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 2607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 2603,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2583,
                                        "src": "27235:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 2601,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2574,
                                        "src": "27220:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 2602,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "readUint8",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 311,
                                      "src": "27220:14:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                                        "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                                      }
                                    },
                                    "id": 2604,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "27220:17:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "id": 2600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "27213:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint16_$",
                                    "typeString": "type(uint16)"
                                  },
                                  "typeName": {
                                    "id": 2599,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "27213:6:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2605,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27213:25:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "hexValue": "38",
                                "id": 2606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27242:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "8"
                              },
                              "src": "27213:30:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "27194:69:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2614,
                        "nodeType": "ExpressionStatement",
                        "src": "27194:69:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2586,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2583,
                      "src": "27158:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2587,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2574,
                        "src": "27162:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "27162:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27158:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2616,
                  "initializationExpression": {
                    "assignments": [
                      2583
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2583,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2616,
                        "src": "27146:6:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2582,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "27146:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2585,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 2584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27155:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "27146:10:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 2591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "27175:3:2",
                      "subExpression": {
                        "id": 2590,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2583,
                        "src": "27175:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2592,
                    "nodeType": "ExpressionStatement",
                    "src": "27175:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "27141:133:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2624,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2619,
                          "name": "ac",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2580,
                          "src": "27297:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2620,
                                "name": "ac",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2580,
                                "src": "27303:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "3136",
                                "id": 2621,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27309:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "16"
                              },
                              "src": "27303:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 2623,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "27302:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "27297:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "27290:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint16_$",
                        "typeString": "type(uint16)"
                      },
                      "typeName": {
                        "id": 2617,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "27290:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 2625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27290:23:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 2578,
                  "id": 2626,
                  "nodeType": "Return",
                  "src": "27283:30:2"
                }
              ]
            },
            "documentation": {
              "id": 2572,
              "nodeType": "StructuredDocumentation",
              "src": "26882:154:2",
              "text": " @dev Computes the keytag for a chunk of data.\n @param data The data to compute a keytag for.\n @return The computed key tag."
            },
            "id": 2628,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeKeytag",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2574,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2628,
                  "src": "27064:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2573,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "27064:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27063:19:2"
            },
            "returnParameters": {
              "id": 2578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2577,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2628,
                  "src": "27106:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 2576,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "27106:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27105:8:2"
            },
            "scope": 2629,
            "src": "27041:279:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2630,
        "src": "442:26880:2"
      }
    ],
    "src": "0:27323:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.4+commit.3f05b770.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.2",
  "updatedAt": "2021-01-20T20:53:41.142Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "constructor": {
        "details": "Constructor.",
        "params": {
          "_anchors": "The binary format RR entries for the root DS records."
        }
      },
      "deleteRRSet(uint16,bytes,(bytes,bytes),bytes)": {
        "details": "Deletes an RR from the oracle.",
        "params": {
          "deleteName": "which you want to delete",
          "deleteType": "The DNS record type to delete.",
          "nsec": "The signed NSEC RRset. This is in the format described in section        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature        data, followed by a series of canonicalised RR records that the signature        applies to."
        }
      },
      "deleteRRSetNSEC3(uint16,bytes,(bytes,bytes),(bytes,bytes),bytes)": {
        "details": "Deletes an RR from the oracle using an NSEC3 proof.      Deleting a record using NSEC3 requires using up to two NSEC3 records. There are two cases:       1. The name exists, but the record type doesn't. Eg, example.com has A records but no TXT records.       2. The name does not exist, but a parent name does.      In the first case, we submit one NSEC3 proof in `closestEncloser` that matches the target name      but does not have the bit for `deleteType` set in its type bitmap. In the second case, we submit      two proofs: closestEncloser and nextClosest, that together prove that the name does not exist.      NSEC3 records are in the format described in section 5.3.2 of RFC4035: The RRDATA section      from the RRSIG without the signature data, followed by a series of canonicalised RR records      that the signature applies to.",
        "params": {
          "closestEncloser": "An NSEC3 proof matching the closest enclosing name - that is,        the nearest ancestor of the target name that *does* exist.",
          "deleteName": "The name to delete.",
          "deleteType": "The DNS record type to delete.",
          "dnskey": "An encoded DNSKEY record that has already been submitted to the oracle and can be used        to verify the signatures closestEncloserSig and nextClosestSig",
          "nextClosest": "An NSEC3 proof covering the next closest name. This proves that the immediate        subdomain of the closestEncloser does not exist."
        }
      },
      "rrdata(uint16,bytes)": {
        "details": "Returns data about the RRs (if any) known to this oracle with the provided type and name.",
        "params": {
          "dnstype": "The DNS record type to query.",
          "name": "The name to query, in DNS label-sequence format."
        },
        "returns": {
          "_0": "inception The unix timestamp at which the signature for this RRSET was created.",
          "_1": "inserted The unix timestamp at which this RRSET was inserted into the oracle.",
          "_2": "hash The hash of the RRset that was inserted."
        }
      },
      "setAlgorithm(uint8,address)": {
        "details": "Sets the contract address for a signature verification algorithm.      Callable only by the owner.",
        "params": {
          "algo": "The address of the algorithm contract.",
          "id": "The algorithm ID"
        }
      },
      "setDigest(uint8,address)": {
        "details": "Sets the contract address for a digest verification algorithm.      Callable only by the owner.",
        "params": {
          "digest": "The address of the digest contract.",
          "id": "The digest ID"
        }
      },
      "setNSEC3Digest(uint8,address)": {
        "details": "Sets the contract address for an NSEC3 digest algorithm.      Callable only by the owner.",
        "params": {
          "digest": "The address of the digest contract.",
          "id": "The digest ID"
        }
      },
      "submitRRSet((bytes,bytes),bytes)": {
        "details": "Submits a signed set of RRs to the oracle. RRSETs are only accepted if they are signed with a key that is already trusted, or if they are self-signed, and the signing key is identified by a DS record that is already trusted.",
        "params": {
          "input": "The signed RR set. This is in the format described in section        5.3.2 of RFC4035: The RRDATA section from the RRSIG without the signature        data, followed by a series of canonicalised RR records that the signature        applies to.",
          "proof": "The DNSKEY or DS to validate the signature against. Must Already        have been submitted and proved previously."
        }
      },
      "submitRRSets(bytes,bytes)": {
        "details": "Submits multiple RRSets",
        "params": {
          "_proof": "The DNSKEY or DS to validate the first signature against.",
          "data": "The data to submit, as a series of chunks. Each chunk is        in the format <uint16 length><bytes input><uint16 length><bytes sig>"
        },
        "returns": {
          "_0": "The last RRSET submitted."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}