{
  "fileName": "Package.sol",
  "contractName": "Package",
  "source": "pragma solidity ^0.6.0;\n// SPDX-License-Identifier: MIT\n\nimport \"../ownership/Ownable.sol\";\n\n/**\n * @title Package\n * @dev A package is composed by a set of versions, identified via semantic versioning,\n * where each version has a contract address that refers to a reusable implementation,\n * plus an optional content URI with metadata. Note that the semver identifier is restricted\n * to major, minor, and patch, as prerelease tags are not supported.\n */\ncontract Package is OpenZeppelinUpgradesOwnable {\n  /**\n   * @dev Emitted when a version is added to the package.\n   * @param semanticVersion Name of the added version.\n   * @param contractAddress Contract associated with the version.\n   * @param contentURI Optional content URI with metadata of the version.\n   */\n  event VersionAdded(uint64[3] semanticVersion, address contractAddress, bytes contentURI);\n\n  struct Version {\n    uint64[3] semanticVersion;\n    address contractAddress;\n    bytes contentURI;\n  }\n\n  mapping (bytes32 => Version) internal versions;\n  mapping (uint64 => bytes32) internal majorToLatestVersion;\n  uint64 internal latestMajor;\n\n  /**\n   * @dev Returns a version given its semver identifier.\n   * @param semanticVersion Semver identifier of the version.\n   * @return contractAddress - Contract address and content URI for the version, or zero if not exists.\n   */\n  function getVersion(uint64[3] memory semanticVersion) public view returns (address contractAddress, bytes memory contentURI) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return (version.contractAddress, version.contentURI);\n  }\n\n  /**\n   * @dev Returns a contract for a version given its semver identifier.\n   * This method is equivalent to `getVersion`, but returns only the contract address.\n   * @param semanticVersion Semver identifier of the version.\n   * @return contractAddress - Contract address for the version, or zero if not exists.\n   */\n  function getContract(uint64[3] memory semanticVersion) public view returns (address contractAddress) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return version.contractAddress;\n  }\n\n  /**\n   * @dev Adds a new version to the package. Only the Owner can add new versions.\n   * Reverts if the specified semver identifier already exists.\n   * Emits a `VersionAdded` event if successful.\n   * @param semanticVersion Semver identifier of the version.\n   * @param contractAddress Contract address for the version, must be non-zero.\n   * @param contentURI Optional content URI for the version.\n   */\n  function addVersion(uint64[3] memory semanticVersion, address contractAddress, bytes memory contentURI) public onlyOwner {\n    require(contractAddress != address(0), \"Contract address is required\");\n    require(!hasVersion(semanticVersion), \"Given version is already registered in package\");\n    require(!semanticVersionIsZero(semanticVersion), \"Version must be non zero\");\n\n    // Register version\n    bytes32 versionId = semanticVersionHash(semanticVersion);\n    versions[versionId] = Version(semanticVersion, contractAddress, contentURI);\n\n    // Update latest major\n    uint64 major = semanticVersion[0];\n    if (major > latestMajor) {\n      latestMajor = semanticVersion[0];\n    }\n\n    // Update latest version for this major\n    uint64 minor = semanticVersion[1];\n    uint64 patch = semanticVersion[2];\n    uint64[3] storage latestVersionForMajor = versions[majorToLatestVersion[major]].semanticVersion;\n    if (semanticVersionIsZero(latestVersionForMajor) // No latest was set for this major\n       || (minor > latestVersionForMajor[1]) // Or current minor is greater\n       || (minor == latestVersionForMajor[1] && patch > latestVersionForMajor[2]) // Or current patch is greater\n       ) {\n      majorToLatestVersion[major] = versionId;\n    }\n\n    emit VersionAdded(semanticVersion, contractAddress, contentURI);\n  }\n\n  /**\n   * @dev Checks whether a version is present in the package.\n   * @param semanticVersion Semver identifier of the version.\n   * @return true if the version is registered in this package, false otherwise.\n   */\n  function hasVersion(uint64[3] memory semanticVersion) public view returns (bool) {\n    Version storage version = versions[semanticVersionHash(semanticVersion)];\n    return address(version.contractAddress) != address(0);\n  }\n\n  /**\n   * @dev Returns the version with the highest semver identifier registered in the package.\n   * For instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will always return `2.0.0`, regardless\n   * of the order in which they were registered. Returns zero if no versions are registered.\n   * @return semanticVersion Semver identifier, contract address,\n   * and content URI for the version, or zero if not exists.\n   */\n  function getLatest() public view returns (uint64[3] memory semanticVersion, address contractAddress, bytes memory contentURI) {\n    return getLatestByMajor(latestMajor);\n  }\n\n  /**\n   * @dev Returns the version with the highest semver identifier for the given major.\n   * For instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will return `1.3.0` for major `1`,\n   * regardless of the order in which they were registered. Returns zero if no versions are registered\n   * for the specified major.\n   * @param major Major identifier to query\n   * @return semanticVersion - Semver identifier, contract address,\n   * and content URI for the version, or zero if not exists.\n   */\n  function getLatestByMajor(uint64 major) public view returns (uint64[3] memory semanticVersion, address contractAddress, bytes memory contentURI) {\n    Version storage version = versions[majorToLatestVersion[major]];\n    return (version.semanticVersion, version.contractAddress, version.contentURI);\n  }\n\n  function semanticVersionHash(uint64[3] memory version) internal pure returns (bytes32) {\n    return keccak256(abi.encodePacked(version[0], version[1], version[2]));\n  }\n\n  function semanticVersionIsZero(uint64[3] memory version) internal pure returns (bool) {\n    return version[0] == 0 && version[1] == 0 && version[2] == 0;\n  }\n}\n",
  "sourcePath": "contracts/application/Package.sol",
  "sourceMap": "456:5638:4:-:0;;;;;;;;;;;;;978:115:33;1021:10;1012:6;;:19;;;;;;;;;;;;;;;;;;1079:6;;;;;;;;;;;1046:40;;1075:1;1046:40;;;;;;;;;;;;978:115;456:5638:4;;;;;;;;;",
  "deployedSourceMap": "456:5638:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1941:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4121:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1844:137:33;;;:::i;:::-;;1156:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1476:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5457:302:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4776:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2575:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1350:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2152:107:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1941:220:4;2017:23;2048;2074:8;;;:46;2083:36;2103:15;2083:19;:36;;:::i;:::-;2074:46;;;;;;;;;;;;;;;;;;;2048:72;;2133:7;:23;;;;;;;;;;;;2126:30;;;;;1941:220;;;;;:::o;4121:223::-;4196:4;4208:23;4234:8;;;:46;4243:36;4263:15;4243:19;:36;;:::i;:::-;4234:46;;;;;;;;;;;;;;;;;;;4208:72;;4337:1;4293:46;;4301:7;:23;;;;;;;;;;;;4293:46;;;;4286:53;;;;;4121:223;;;;;:::o;1844:137:33:-;1360:9;:7;:9;;:::i;:::-;1352:18;;;;;;;;1942:1:::1;1905:40;;1926:6;;;;;;;;;;;1905:40;;;;;;;;;;;;1972:1;1955:6;;:19;;;;;;;;;;;;;;;;;;1380:1;1844:137:::0;:::o;1156:77::-;1194:7;1220:6;;;;;;;;;;;1213:13;;;;1156:77;;:::o;1476:90::-;1516:4;1553:6;;;;;;;;;;;1539:20;;:10;:20;;;1532:27;;;;1476:90;;:::o;5457:302:4:-;5518:32;;:::i;:::-;5552:23;5577;5608;5634:8;;;:37;5643:20;;;:27;5664:5;5643:27;;;;;;;;;;;;;;;;;;5634:37;;;;;;;;;;;;;;;;;;;5608:63;;5685:7;:23;;;;5710:7;:23;;;;;;;;;;;;5735:7;:18;;;;5677:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5457:302;;;;;;;:::o;4776:173::-;4818:32;;:::i;:::-;4852:23;4877;4915:29;4932:11;;;;;;;;;;;4915:16;:29;;:::i;:::-;4908:36;;;;;;;;4776:173;;;;:::o;2575:1325::-;1360:9:33;:7;:9;;:::i;:::-;1352:18;;;;;;;;2737:1:4::1;2710:29;;:15;:29;;;;2702:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:27;2798:15;2787:10;:27;;:::i;:::-;2786:28;2778:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2880:38;2902:15;2880:21;:38;;:::i;:::-;2879:39;2871:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2978:17;2998:36;3018:15;2998:19;:36;;:::i;:::-;2978:56;;3062:53;;;;;;;;3070:15;3062:53;;;;3087:15;3062:53;;;;;;3104:10;3062:53;;;;;3040:8;;;:19;3049:9;3040:19;;;;;;;;;;;;;;;;;;:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;3149:12;3164:15;3180:1;3164:18;;;;;;;;;;;;;3149:33;;3200:11;;;;;;;;;;;3192:19;;:5;:19;;;3188:72;;;3235:15;3251:1;3235:18;;;;;;;;;;;;;3221:11;;:32;;;;;;;;;;;;;;;;;;3188:72;3310:12;3325:15;3341:1;3325:18;;;;;;;;;;;;;3310:33;;3349:12;3364:15;3380:1;3364:18;;;;;;;;;;;;;3349:33;;3388:39;3430:8;;;:37;3439:20;;;:27;3460:5;3439:27;;;;;;;;;;;;;;;;;;3430:37;;;;;;;;;;;;;;;;;;;:53;;;;3388:95;;3493:44;3515:21;3493:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;:44;;:::i;:::-;:125;;;;3593:21;3615:1;3593:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3585:32;;:5;:32;;;3493:125;:238;;;;3670:21;3692:1;3670:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3661:33;;:5;:33;;;:69;;;;;3706:21;3728:1;3706:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:32;;:5;:32;;;3661:69;3493:238;3489:337;;;3810:9;3780:20;;;:27;3801:5;3780:27;;;;;;;;;;;;;;;;:39;;;;;;;;;;3489:337;3837:58;3850:15;3867;3884:10;3837:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1380:1:33;;;;;;2575:1325:4::0;;;;:::o;1350:266::-;1425:23;1450;1481;1507:8;;;:46;1516:36;1536:15;1516:19;:36;;:::i;:::-;1507:46;;;;;;;;;;;;;;;;;;;1481:72;;1567:7;:23;;;;;;;;;;;;1592:7;:18;;;;1559:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1350:266;;;;;:::o;2152:107:33:-;1360:9;:7;:9;;:::i;:::-;1352:18;;;;;;;;2224:28:::1;2243:8;2224:18;:28;;:::i;:::-;1380:1;2152:107:::0;;:::o;5763:168:4:-;5841:7;5890;5898:1;5890:10;;;;;;;;;;;;;5902:7;5910:1;5902:10;;;;;;;;;;;;;5914:7;5922:1;5914:10;;;;;;;;;;;;;5873:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5863:63;;;;;;5856:70;;;;5763:168;;;;:::o;5935:157::-;6015:4;6048:1;6034:7;6042:1;6034:10;;;;;;;;;;;;;:15;;;:34;;;;;6067:1;6053:7;6061:1;6053:10;;;;;;;;;;;;;:15;;;6034:34;:53;;;;;6086:1;6072:7;6080:1;6072:10;;;;;;;;;;;;;:15;;;6034:53;6027:60;;;;5935:157;;;;:::o;2403:183:33:-;2496:1;2476:22;;:8;:22;;;;2468:31;;;;;;;;2543:8;2514:38;;2535:6;;;;;;;;;;;2514:38;;;;;;;;;;;;2571:8;2562:6;;:17;;;;;;;;;;;;;;;;;;2403:183;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64[3]",
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "name": "VersionAdded",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[3]",
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "name": "addVersion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[3]",
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "getContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLatest",
      "outputs": [
        {
          "internalType": "uint64[3]",
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "major",
          "type": "uint64"
        }
      ],
      "name": "getLatestByMajor",
      "outputs": [
        {
          "internalType": "uint64[3]",
          "name": "semanticVersion",
          "type": "uint64[3]"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[3]",
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "getVersion",
      "outputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "contentURI",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[3]",
          "name": "semanticVersion",
          "type": "uint64[3]"
        }
      ],
      "name": "hasVersion",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/application/Package.sol",
    "exportedSymbols": {
      "Package": [
        849
      ]
    },
    "id": 850,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 498,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:4"
      },
      {
        "absolutePath": "contracts/ownership/Ownable.sol",
        "file": "../ownership/Ownable.sol",
        "id": 499,
        "nodeType": "ImportDirective",
        "scope": 850,
        "sourceUnit": 5785,
        "src": "57:34:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 501,
              "name": "OpenZeppelinUpgradesOwnable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5784,
              "src": "476:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OpenZeppelinUpgradesOwnable_$5784",
                "typeString": "contract OpenZeppelinUpgradesOwnable"
              }
            },
            "id": 502,
            "nodeType": "InheritanceSpecifier",
            "src": "476:27:4"
          }
        ],
        "contractDependencies": [
          5784
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 500,
          "nodeType": "StructuredDocumentation",
          "src": "93:362:4",
          "text": " @title Package\n @dev A package is composed by a set of versions, identified via semantic versioning,\n where each version has a contract address that refers to a reusable implementation,\n plus an optional content URI with metadata. Note that the semver identifier is restricted\n to major, minor, and patch, as prerelease tags are not supported."
        },
        "fullyImplemented": true,
        "id": 849,
        "linearizedBaseContracts": [
          849,
          5784
        ],
        "name": "Package",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 503,
              "nodeType": "StructuredDocumentation",
              "src": "508:262:4",
              "text": " @dev Emitted when a version is added to the package.\n @param semanticVersion Name of the added version.\n @param contractAddress Contract associated with the version.\n @param contentURI Optional content URI with metadata of the version."
            },
            "id": 513,
            "name": "VersionAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 512,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 507,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 513,
                  "src": "792:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 504,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "792:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 506,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 505,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "799:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "792:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 509,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 513,
                  "src": "819:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "819:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 511,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 513,
                  "src": "844:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 510,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "844:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "791:70:4"
            },
            "src": "773:89:4"
          },
          {
            "canonicalName": "Package.Version",
            "id": 522,
            "members": [
              {
                "constant": false,
                "id": 517,
                "mutability": "mutable",
                "name": "semanticVersion",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 522,
                "src": "887:25:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                  "typeString": "uint64[3]"
                },
                "typeName": {
                  "baseType": {
                    "id": 514,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "887:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 516,
                  "length": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "894:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "887:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                    "typeString": "uint64[3]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 519,
                "mutability": "mutable",
                "name": "contractAddress",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 522,
                "src": "918:23:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 518,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "918:7:4",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 521,
                "mutability": "mutable",
                "name": "contentURI",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 522,
                "src": "947:16:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 520,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "947:5:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Version",
            "nodeType": "StructDefinition",
            "scope": 849,
            "src": "866:102:4",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 526,
            "mutability": "mutable",
            "name": "versions",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 849,
            "src": "972:46:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$522_storage_$",
              "typeString": "mapping(bytes32 => struct Package.Version)"
            },
            "typeName": {
              "id": 525,
              "keyType": {
                "id": 523,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "981:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "972:28:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$522_storage_$",
                "typeString": "mapping(bytes32 => struct Package.Version)"
              },
              "valueType": {
                "contractScope": null,
                "id": 524,
                "name": "Version",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 522,
                "src": "992:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                  "typeString": "struct Package.Version"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 530,
            "mutability": "mutable",
            "name": "majorToLatestVersion",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 849,
            "src": "1022:57:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
              "typeString": "mapping(uint64 => bytes32)"
            },
            "typeName": {
              "id": 529,
              "keyType": {
                "id": 527,
                "name": "uint64",
                "nodeType": "ElementaryTypeName",
                "src": "1031:6:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                }
              },
              "nodeType": "Mapping",
              "src": "1022:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                "typeString": "mapping(uint64 => bytes32)"
              },
              "valueType": {
                "id": 528,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1041:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 532,
            "mutability": "mutable",
            "name": "latestMajor",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 849,
            "src": "1083:27:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 531,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "1083:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 558,
              "nodeType": "Block",
              "src": "1475:141:4",
              "statements": [
                {
                  "assignments": [
                    545
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 545,
                      "mutability": "mutable",
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 558,
                      "src": "1481:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 544,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 522,
                        "src": "1481:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 551,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 546,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 526,
                      "src": "1507:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$522_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 550,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 548,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 537,
                          "src": "1536:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 547,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 820,
                        "src": "1516:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 549,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1516:36:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1507:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$522_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1481:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 552,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 545,
                          "src": "1567:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 553,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 519,
                        "src": "1567:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 554,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 545,
                          "src": "1592:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 555,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contentURI",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 521,
                        "src": "1592:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 556,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1566:45:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_bytes_storage_$",
                      "typeString": "tuple(address,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 543,
                  "id": 557,
                  "nodeType": "Return",
                  "src": "1559:52:4"
                }
              ]
            },
            "documentation": {
              "id": 533,
              "nodeType": "StructuredDocumentation",
              "src": "1115:232:4",
              "text": " @dev Returns a version given its semver identifier.\n @param semanticVersion Semver identifier of the version.\n @return contractAddress - Contract address and content URI for the version, or zero if not exists."
            },
            "functionSelector": "e30329e9",
            "id": 559,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVersion",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 538,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 537,
                  "mutability": "mutable",
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 559,
                  "src": "1370:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 534,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1370:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 536,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1377:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1370:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1369:34:4"
            },
            "returnParameters": {
              "id": 543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 540,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 559,
                  "src": "1425:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 539,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1425:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 542,
                  "mutability": "mutable",
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 559,
                  "src": "1450:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 541,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1450:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1424:50:4"
            },
            "scope": 849,
            "src": "1350:266:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 580,
              "nodeType": "Block",
              "src": "2042:119:4",
              "statements": [
                {
                  "assignments": [
                    570
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 570,
                      "mutability": "mutable",
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 580,
                      "src": "2048:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 569,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 522,
                        "src": "2048:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 576,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 571,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 526,
                      "src": "2074:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$522_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 575,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 573,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 564,
                          "src": "2103:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 572,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 820,
                        "src": "2083:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2083:36:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2074:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$522_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2048:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 577,
                      "name": "version",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 570,
                      "src": "2133:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                        "typeString": "struct Package.Version storage pointer"
                      }
                    },
                    "id": 578,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contractAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 519,
                    "src": "2133:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 568,
                  "id": 579,
                  "nodeType": "Return",
                  "src": "2126:30:4"
                }
              ]
            },
            "documentation": {
              "id": 560,
              "nodeType": "StructuredDocumentation",
              "src": "1620:318:4",
              "text": " @dev Returns a contract for a version given its semver identifier.\n This method is equivalent to `getVersion`, but returns only the contract address.\n @param semanticVersion Semver identifier of the version.\n @return contractAddress - Contract address for the version, or zero if not exists."
            },
            "functionSelector": "1df40eaa",
            "id": 581,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getContract",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 564,
                  "mutability": "mutable",
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 581,
                  "src": "1962:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 561,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1962:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 563,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 562,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1969:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1962:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1961:34:4"
            },
            "returnParameters": {
              "id": 568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 567,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 581,
                  "src": "2017:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2017:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2016:25:4"
            },
            "scope": 849,
            "src": "1941:220:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 716,
              "nodeType": "Block",
              "src": "2696:1204:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 601,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 596,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 588,
                          "src": "2710:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 599,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2737:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 598,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2729:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 597,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2729:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2729:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2710:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436f6e74726163742061646472657373206973207265717569726564",
                        "id": 602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2741:30:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_780e49f834be75d00932cec8d636b1a7b22db8f51cf085cf57f0b010ea79c7d2",
                          "typeString": "literal_string \"Contract address is required\""
                        },
                        "value": "Contract address is required"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_780e49f834be75d00932cec8d636b1a7b22db8f51cf085cf57f0b010ea79c7d2",
                          "typeString": "literal_string \"Contract address is required\""
                        }
                      ],
                      "id": 595,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2702:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2702:70:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 604,
                  "nodeType": "ExpressionStatement",
                  "src": "2702:70:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 609,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2786:28:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 607,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 586,
                              "src": "2798:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            ],
                            "id": 606,
                            "name": "hasVersion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 747,
                            "src": "2787:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint64[3] memory) view returns (bool)"
                            }
                          },
                          "id": 608,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2787:27:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2076657273696f6e20697320616c7265616479207265676973746572656420696e207061636b616765",
                        "id": 610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2816:48:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b3ae3984ba439aa79dd8a004069b5c408247b6da429c2768dd9a60b038d8514",
                          "typeString": "literal_string \"Given version is already registered in package\""
                        },
                        "value": "Given version is already registered in package"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b3ae3984ba439aa79dd8a004069b5c408247b6da429c2768dd9a60b038d8514",
                          "typeString": "literal_string \"Given version is already registered in package\""
                        }
                      ],
                      "id": 605,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2778:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2778:87:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 612,
                  "nodeType": "ExpressionStatement",
                  "src": "2778:87:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 617,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2879:39:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 615,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 586,
                              "src": "2902:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            ],
                            "id": 614,
                            "name": "semanticVersionIsZero",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 848,
                            "src": "2880:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (uint64[3] memory) pure returns (bool)"
                            }
                          },
                          "id": 616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2880:38:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56657273696f6e206d757374206265206e6f6e207a65726f",
                        "id": 618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2920:26:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae50164b17b79ab427212ce5adf036461d23ee5ab8d14bb5bfd84b837662d57a",
                          "typeString": "literal_string \"Version must be non zero\""
                        },
                        "value": "Version must be non zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae50164b17b79ab427212ce5adf036461d23ee5ab8d14bb5bfd84b837662d57a",
                          "typeString": "literal_string \"Version must be non zero\""
                        }
                      ],
                      "id": 613,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2871:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2871:76:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 620,
                  "nodeType": "ExpressionStatement",
                  "src": "2871:76:4"
                },
                {
                  "assignments": [
                    622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 622,
                      "mutability": "mutable",
                      "name": "versionId",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 716,
                      "src": "2978:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 621,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2978:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 626,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 624,
                        "name": "semanticVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 586,
                        "src": "3018:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      ],
                      "id": 623,
                      "name": "semanticVersionHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 820,
                      "src": "2998:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                      }
                    },
                    "id": 625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2998:36:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2978:56:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 627,
                        "name": "versions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 526,
                        "src": "3040:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$522_storage_$",
                          "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                        }
                      },
                      "id": 629,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 628,
                        "name": "versionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 622,
                        "src": "3049:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3040:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$522_storage",
                        "typeString": "struct Package.Version storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 631,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 586,
                          "src": "3070:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 632,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 588,
                          "src": "3087:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 633,
                          "name": "contentURI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 590,
                          "src": "3104:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 630,
                        "name": "Version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 522,
                        "src": "3062:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Version_$522_storage_ptr_$",
                          "typeString": "type(struct Package.Version storage pointer)"
                        }
                      },
                      "id": 634,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3062:53:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$522_memory_ptr",
                        "typeString": "struct Package.Version memory"
                      }
                    },
                    "src": "3040:75:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$522_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "id": 636,
                  "nodeType": "ExpressionStatement",
                  "src": "3040:75:4"
                },
                {
                  "assignments": [
                    638
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 638,
                      "mutability": "mutable",
                      "name": "major",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 716,
                      "src": "3149:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 637,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3149:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 642,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 639,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 586,
                      "src": "3164:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 641,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3180:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3164:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3149:33:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 643,
                      "name": "major",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 638,
                      "src": "3192:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 644,
                      "name": "latestMajor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 532,
                      "src": "3200:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "3192:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 653,
                  "nodeType": "IfStatement",
                  "src": "3188:72:4",
                  "trueBody": {
                    "id": 652,
                    "nodeType": "Block",
                    "src": "3213:47:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 646,
                            "name": "latestMajor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 532,
                            "src": "3221:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 647,
                              "name": "semanticVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 586,
                              "src": "3235:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 649,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 648,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3251:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3235:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "3221:32:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 651,
                        "nodeType": "ExpressionStatement",
                        "src": "3221:32:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    655
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 655,
                      "mutability": "mutable",
                      "name": "minor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 716,
                      "src": "3310:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 654,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3310:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 659,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 656,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 586,
                      "src": "3325:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 658,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 657,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3341:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3325:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3310:33:4"
                },
                {
                  "assignments": [
                    661
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 661,
                      "mutability": "mutable",
                      "name": "patch",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 716,
                      "src": "3349:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 660,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "3349:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 665,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 662,
                      "name": "semanticVersion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 586,
                      "src": "3364:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                        "typeString": "uint64[3] memory"
                      }
                    },
                    "id": 664,
                    "indexExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 663,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3380:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3364:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3349:33:4"
                },
                {
                  "assignments": [
                    671
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 671,
                      "mutability": "mutable",
                      "name": "latestVersionForMajor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 716,
                      "src": "3388:39:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                        "typeString": "uint64[3]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 669,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "3388:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 670,
                        "length": {
                          "argumentTypes": null,
                          "hexValue": "33",
                          "id": 668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3395:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_3_by_1",
                            "typeString": "int_const 3"
                          },
                          "value": "3"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "3388:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                          "typeString": "uint64[3]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 678,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 672,
                        "name": "versions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 526,
                        "src": "3430:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$522_storage_$",
                          "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                        }
                      },
                      "id": 676,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 673,
                          "name": "majorToLatestVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 530,
                          "src": "3439:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                            "typeString": "mapping(uint64 => bytes32)"
                          }
                        },
                        "id": 675,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 674,
                          "name": "major",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 638,
                          "src": "3460:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3439:27:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3430:37:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$522_storage",
                        "typeString": "struct Package.Version storage ref"
                      }
                    },
                    "id": 677,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "semanticVersion",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 517,
                    "src": "3430:53:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage",
                      "typeString": "uint64[3] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3388:95:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 688,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 680,
                            "name": "latestVersionForMajor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 671,
                            "src": "3515:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                              "typeString": "uint64[3] storage pointer"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                              "typeString": "uint64[3] storage pointer"
                            }
                          ],
                          "id": 679,
                          "name": "semanticVersionIsZero",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 848,
                          "src": "3493:21:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint64[3] memory) pure returns (bool)"
                          }
                        },
                        "id": 681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3493:44:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 686,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 682,
                              "name": "minor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 655,
                              "src": "3585:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 683,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 671,
                                "src": "3593:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 685,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 684,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3615:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3593:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3585:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 687,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3584:34:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "3493:125:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 693,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 689,
                              "name": "minor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 655,
                              "src": "3661:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 690,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 671,
                                "src": "3670:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 692,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 691,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3692:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3670:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3661:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 694,
                              "name": "patch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 661,
                              "src": "3698:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 695,
                                "name": "latestVersionForMajor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 671,
                                "src": "3706:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                                  "typeString": "uint64[3] storage pointer"
                                }
                              },
                              "id": 697,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 696,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3728:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3706:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "3698:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3661:69:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 700,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3660:71:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3493:238:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 709,
                  "nodeType": "IfStatement",
                  "src": "3489:337:4",
                  "trueBody": {
                    "id": 708,
                    "nodeType": "Block",
                    "src": "3772:54:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 702,
                              "name": "majorToLatestVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 530,
                              "src": "3780:20:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                                "typeString": "mapping(uint64 => bytes32)"
                              }
                            },
                            "id": 704,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 703,
                              "name": "major",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 638,
                              "src": "3801:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3780:27:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 705,
                            "name": "versionId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 622,
                            "src": "3810:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3780:39:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 707,
                        "nodeType": "ExpressionStatement",
                        "src": "3780:39:4"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 711,
                        "name": "semanticVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 586,
                        "src": "3850:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 712,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 588,
                        "src": "3867:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 713,
                        "name": "contentURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 590,
                        "src": "3884:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                          "typeString": "uint64[3] memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 710,
                      "name": "VersionAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 513,
                      "src": "3837:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint64[3] memory,address,bytes memory)"
                      }
                    },
                    "id": 714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3837:58:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 715,
                  "nodeType": "EmitStatement",
                  "src": "3832:63:4"
                }
              ]
            },
            "documentation": {
              "id": 582,
              "nodeType": "StructuredDocumentation",
              "src": "2165:407:4",
              "text": " @dev Adds a new version to the package. Only the Owner can add new versions.\n Reverts if the specified semver identifier already exists.\n Emits a `VersionAdded` event if successful.\n @param semanticVersion Semver identifier of the version.\n @param contractAddress Contract address for the version, must be non-zero.\n @param contentURI Optional content URI for the version."
            },
            "functionSelector": "d6ef25d5",
            "id": 717,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 593,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 592,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5711,
                  "src": "2686:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2686:9:4"
              }
            ],
            "name": "addVersion",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 586,
                  "mutability": "mutable",
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 717,
                  "src": "2595:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 583,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "2595:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 585,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2602:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2595:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 588,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 717,
                  "src": "2629:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 587,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2629:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 590,
                  "mutability": "mutable",
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 717,
                  "src": "2654:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 589,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2654:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2594:84:4"
            },
            "returnParameters": {
              "id": 594,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2696:0:4"
            },
            "scope": 849,
            "src": "2575:1325:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 746,
              "nodeType": "Block",
              "src": "4202:142:4",
              "statements": [
                {
                  "assignments": [
                    728
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 728,
                      "mutability": "mutable",
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 746,
                      "src": "4208:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 727,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 522,
                        "src": "4208:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 734,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 729,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 526,
                      "src": "4234:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$522_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 733,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 731,
                          "name": "semanticVersion",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 722,
                          "src": "4263:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        ],
                        "id": 730,
                        "name": "semanticVersionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 820,
                        "src": "4243:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint64_$3_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (uint64[3] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4243:36:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4234:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$522_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4208:72:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 737,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 728,
                            "src": "4301:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                              "typeString": "struct Package.Version storage pointer"
                            }
                          },
                          "id": 738,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "contractAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 519,
                          "src": "4301:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4293:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 735,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4293:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4293:32:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4337:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 741,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4329:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 740,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4329:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4329:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4293:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 726,
                  "id": 745,
                  "nodeType": "Return",
                  "src": "4286:53:4"
                }
              ]
            },
            "documentation": {
              "id": 718,
              "nodeType": "StructuredDocumentation",
              "src": "3904:214:4",
              "text": " @dev Checks whether a version is present in the package.\n @param semanticVersion Semver identifier of the version.\n @return true if the version is registered in this package, false otherwise."
            },
            "functionSelector": "35ce4016",
            "id": 747,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasVersion",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 722,
                  "mutability": "mutable",
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 747,
                  "src": "4141:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 719,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "4141:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 721,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 720,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4148:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4141:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4140:34:4"
            },
            "returnParameters": {
              "id": 726,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 725,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 747,
                  "src": "4196:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 724,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4196:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4195:6:4"
            },
            "scope": 849,
            "src": "4121:223:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 763,
              "nodeType": "Block",
              "src": "4902:47:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 760,
                        "name": "latestMajor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 532,
                        "src": "4932:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 759,
                      "name": "getLatestByMajor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 795,
                      "src": "4915:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint64_$returns$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint64) view returns (uint64[3] memory,address,bytes memory)"
                      }
                    },
                    "id": 761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4915:29:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint64_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(uint64[3] memory,address,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 758,
                  "id": 762,
                  "nodeType": "Return",
                  "src": "4908:36:4"
                }
              ]
            },
            "documentation": {
              "id": 748,
              "nodeType": "StructuredDocumentation",
              "src": "4348:425:4",
              "text": " @dev Returns the version with the highest semver identifier registered in the package.\n For instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will always return `2.0.0`, regardless\n of the order in which they were registered. Returns zero if no versions are registered.\n @return semanticVersion Semver identifier, contract address,\n and content URI for the version, or zero if not exists."
            },
            "functionSelector": "c36af460",
            "id": 764,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLatest",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 749,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4794:2:4"
            },
            "returnParameters": {
              "id": 758,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 753,
                  "mutability": "mutable",
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 764,
                  "src": "4818:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 750,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "4818:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 752,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 751,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4825:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4818:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 755,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 764,
                  "src": "4852:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 754,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4852:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 757,
                  "mutability": "mutable",
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 764,
                  "src": "4877:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 756,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4877:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4817:84:4"
            },
            "scope": 849,
            "src": "4776:173:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 794,
              "nodeType": "Block",
              "src": "5602:157:4",
              "statements": [
                {
                  "assignments": [
                    779
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 779,
                      "mutability": "mutable",
                      "name": "version",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 794,
                      "src": "5608:23:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                        "typeString": "struct Package.Version"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 778,
                        "name": "Version",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 522,
                        "src": "5608:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                          "typeString": "struct Package.Version"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 785,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 780,
                      "name": "versions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 526,
                      "src": "5634:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Version_$522_storage_$",
                        "typeString": "mapping(bytes32 => struct Package.Version storage ref)"
                      }
                    },
                    "id": 784,
                    "indexExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 781,
                        "name": "majorToLatestVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 530,
                        "src": "5643:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint64_$_t_bytes32_$",
                          "typeString": "mapping(uint64 => bytes32)"
                        }
                      },
                      "id": 783,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 782,
                        "name": "major",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 767,
                        "src": "5664:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5643:27:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5634:37:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Version_$522_storage",
                      "typeString": "struct Package.Version storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5608:63:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 786,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 779,
                          "src": "5685:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 787,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "semanticVersion",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 517,
                        "src": "5685:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint64_$3_storage",
                          "typeString": "uint64[3] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 788,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 779,
                          "src": "5710:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 789,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 519,
                        "src": "5710:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 790,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 779,
                          "src": "5735:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Version_$522_storage_ptr",
                            "typeString": "struct Package.Version storage pointer"
                          }
                        },
                        "id": 791,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contentURI",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 521,
                        "src": "5735:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 792,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "5684:70:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint64_$3_storage_$_t_address_$_t_bytes_storage_$",
                      "typeString": "tuple(uint64[3] storage ref,address,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 777,
                  "id": 793,
                  "nodeType": "Return",
                  "src": "5677:77:4"
                }
              ]
            },
            "documentation": {
              "id": 765,
              "nodeType": "StructuredDocumentation",
              "src": "4953:501:4",
              "text": " @dev Returns the version with the highest semver identifier for the given major.\n For instance, if `1.2.0`, `1.3.0`, and `2.0.0` are present, will return `1.3.0` for major `1`,\n regardless of the order in which they were registered. Returns zero if no versions are registered\n for the specified major.\n @param major Major identifier to query\n @return semanticVersion - Semver identifier, contract address,\n and content URI for the version, or zero if not exists."
            },
            "functionSelector": "c356d5b0",
            "id": 795,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLatestByMajor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 767,
                  "mutability": "mutable",
                  "name": "major",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 795,
                  "src": "5483:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 766,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5483:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5482:14:4"
            },
            "returnParameters": {
              "id": 777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 772,
                  "mutability": "mutable",
                  "name": "semanticVersion",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 795,
                  "src": "5518:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 769,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5518:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 771,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 770,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5525:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5518:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 774,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 795,
                  "src": "5552:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 773,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5552:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 776,
                  "mutability": "mutable",
                  "name": "contentURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 795,
                  "src": "5577:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 775,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5577:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5517:84:4"
            },
            "scope": 849,
            "src": "5457:302:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 819,
              "nodeType": "Block",
              "src": "5850:81:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 807,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 799,
                              "src": "5890:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 809,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 808,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5898:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5890:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 810,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 799,
                              "src": "5902:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 812,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 811,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5910:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5902:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 813,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 799,
                              "src": "5914:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                                "typeString": "uint64[3] memory"
                              }
                            },
                            "id": 815,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5922:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5914:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 805,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "5873:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5873:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5873:52:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 804,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "5863:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5863:63:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 803,
                  "id": 818,
                  "nodeType": "Return",
                  "src": "5856:70:4"
                }
              ]
            },
            "documentation": null,
            "id": 820,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "semanticVersionHash",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 799,
                  "mutability": "mutable",
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 820,
                  "src": "5792:24:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 796,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5792:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 798,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5799:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5792:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5791:26:4"
            },
            "returnParameters": {
              "id": 803,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 802,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 820,
                  "src": "5841:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 801,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5841:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5840:9:4"
            },
            "scope": 849,
            "src": "5763:168:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 847,
              "nodeType": "Block",
              "src": "6021:71:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 829,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 824,
                            "src": "6034:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          },
                          "id": 831,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6042:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6034:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6048:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6034:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 834,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 824,
                            "src": "6053:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                              "typeString": "uint64[3] memory"
                            }
                          },
                          "id": 836,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6061:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6053:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6067:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6053:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "6034:34:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 844,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 840,
                          "name": "version",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 824,
                          "src": "6072:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                            "typeString": "uint64[3] memory"
                          }
                        },
                        "id": 842,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6080:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6072:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6086:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6072:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6034:53:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 828,
                  "id": 846,
                  "nodeType": "Return",
                  "src": "6027:60:4"
                }
              ]
            },
            "documentation": null,
            "id": 848,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "semanticVersionIsZero",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 824,
                  "mutability": "mutable",
                  "name": "version",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 848,
                  "src": "5966:24:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$3_memory_ptr",
                    "typeString": "uint64[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 821,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "5966:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 823,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5973:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5966:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$3_storage_ptr",
                      "typeString": "uint64[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5965:26:4"
            },
            "returnParameters": {
              "id": 828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 827,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 848,
                  "src": "6015:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 826,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6015:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6014:6:4"
            },
            "scope": 849,
            "src": "5935:157:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 850,
        "src": "456:5638:4"
      }
    ],
    "src": "0:6095:4"
  },
  "bytecode": "0x60806040523480156100115760006000fd5b505b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b6100d7565b611730806100e66000396000f3fe60806040523480156100115760006000fd5b50600436106100a35760003560e01c8063c356d5b011610067578063c356d5b01461024b578063c36af46014610361578063d6ef25d514610448578063e30329e914610570578063f2fde38b14610687576100a3565b80631df40eaa146100a957806335ce401614610153578063715018a6146101d55780638da5cb5b146101df5780638f32d59b14610229576100a3565b60006000fd5b610111600480360360608110156100c05760006000fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f8201169050808301925050505050509090919290909192905050506106cc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101bb6004803603606081101561016a5760006000fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f820116905080830192505050505050909091929090919290505050610734565b604051808215151515815260200191505060405180910390f35b6101dd6107cc565b005b6101e76108a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102316108d8565b604051808215151515815260200191505060405180910390f35b610282600480360360208110156102625760006000fd5b81019080803567ffffffffffffffff169060200190929190505050610935565b6040518084600360200280838360005b838110156102ae5780820151818401525b602081019050610292565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103245780820151818401525b602081019050610308565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610369610ae9565b6040518084600360200280838360005b838110156103955780820151818401525b602081019050610379565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561040b5780820151818401525b6020810190506103ef565b50505050905090810190601f1680156104385780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b61056e600480360360a081101561045f5760006000fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f820116905080830192505050505050909091929090919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104e25760006000fd5b8201836020820111156104f55760006000fd5b803590602001918460018302840111640100000000831117156105185760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610b2a565b005b6105d8600480360360608110156105875760006000fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505090909192909091929050505061118f565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561064b5780820151818401525b60208101905061062f565b50505050905090810190601f1680156106785780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6106ca6004803603602081101561069e5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129e565b005b60006000600160005060006106e6856112cc63ffffffff16565b6000191660001916815260200190815260200160002060005090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505061072f56505b919050565b600060006001600050600061074e856112cc63ffffffff16565b600019166000191681526020019081526020016000206000509050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159150506107c756505b919050565b6107da6108d863ffffffff16565b15156107e65760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506108d5565b90565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050610932565b90565b61093d61150e565b60006060600060016000506000600260005060008867ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060005054600019166000191681526020019081526020016000206000509050806000016000508160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260020160005082600380602002604051908101604052809291908260038015610a32576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116109ed5790505b50505050509250808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905093509350935050610ae256505b9193909250565b610af161150e565b60006060610b1a600360009054906101000a900467ffffffffffffffff1661093563ffffffff16565b925092509250610b25565b909192565b610b386108d863ffffffff16565b1515610b445760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610bec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6e747261637420616464726573732069732072657175697265640000000081526020015060200191505060405180910390fd5b610bfb8361073463ffffffff16565b151515610c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806116cd602e913960400191505060405180910390fd5b610c628361138f63ffffffff16565b151515610cda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f56657273696f6e206d757374206265206e6f6e207a65726f000000000000000081526020015060200191505060405180910390fd5b6000610ceb846112cc63ffffffff16565b905060405180606001604052808581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200150600160005060008360001916600019168152602001908152602001600020600050600082015181600001600050906003610d5c929190611530565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002016000509080519060200190610dc39291906115e1565b509050506000846000600381101515610dd857fe5b60200201519050600360009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff161115610e4e57846000600381101515610e2057fe5b6020020151600360006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6000856001600381101515610e5f57fe5b602002015190506000866002600381101515610e7757fe5b60200201519050600060016000506000600260005060008767ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060005054600019166000191681526020019081526020016000206000506000016000509050610f5581600380602002604051908101604052809291908260038015610f45576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610f005790505b505050505061138f63ffffffff16565b80610fa45750806001600381101515610f6a57fe5b9090600491828204019190066008025b9054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16115b806110435750806001600381101515610fb957fe5b9090600491828204019190066008025b9054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16148015611042575080600260038110151561100857fe5b9090600491828204019190066008025b9054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff16115b5b156110815784600260005060008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600050819090600019169055505b7fc5b9b96b4952fc60f5a916010c882de0324dd4fdfaa999f9ad6947f55d8427628888886040518084600360200280838360005b838110156110d15780820151818401525b6020810190506110b5565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111475780820151818401525b60208101905061112b565b50505050905090810190601f1680156111745780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a150505050505b5b505050565b600060606000600160005060006111ab866112cc63ffffffff16565b6000191660001916815260200190815260200160002060005090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600201600050808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b50505050509050925092505061129956505b915091565b6112ac6108d863ffffffff16565b15156112b85760006000fd5b6112c78161141063ffffffff16565b5b5b50565b60008160006003811015156112dd57fe5b60200201518260016003811015156112f157fe5b602002015183600260038110151561130557fe5b6020020151604051602001808467ffffffffffffffff1667ffffffffffffffff1660c01b81526008018367ffffffffffffffff1667ffffffffffffffff1660c01b81526008018267ffffffffffffffff1667ffffffffffffffff1660c01b8152600801935050505060405160208183030381529060405280519060200120905061138a565b919050565b600060008260006003811015156113a257fe5b602002015167ffffffffffffffff161480156113db575060008260016003811015156113ca57fe5b602002015167ffffffffffffffff16145b8015611404575060008260026003811015156113f357fe5b602002015167ffffffffffffffff16145b905061140b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561144d5760006000fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6040518060600160405280600390602082028036833780820191505090505090565b82600390906003016004900481019282156115d05791602002820160005b8382111561159a57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550926020019260080160208160070104928301926001030261154e565b80156115ce5782816101000a81549067ffffffffffffffff021916905560080160208160070104928301926001030261159a565b505b5090506115dd9190611666565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061162257805160ff1916838001178555611655565b82800160010185558215611655579182015b828111156116545782518260005090905591602001919060010190611634565b5b50905061166291906116a1565b5090565b61169e9190611670565b8082111561169a57600081816101000a81549067ffffffffffffffff021916905550600101611670565b5090565b90565b6116c991906116ab565b808211156116c557600081815060009055506001016116ab565b5090565b9056fe476976656e2076657273696f6e20697320616c7265616479207265676973746572656420696e207061636b616765a2646970667358221220445b5c818fc479602bad4cee0239d2c777bcdcd6ad550f21c324eb6e412853b364736f6c634300060a0033",
  "deployedBytecode": "0x60806040523480156100115760006000fd5b50600436106100a35760003560e01c8063c356d5b011610067578063c356d5b01461024b578063c36af46014610361578063d6ef25d514610448578063e30329e914610570578063f2fde38b14610687576100a3565b80631df40eaa146100a957806335ce401614610153578063715018a6146101d55780638da5cb5b146101df5780638f32d59b14610229576100a3565b60006000fd5b610111600480360360608110156100c05760006000fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f8201169050808301925050505050509090919290909192905050506106cc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101bb6004803603606081101561016a5760006000fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f820116905080830192505050505050909091929090919290505050610734565b604051808215151515815260200191505060405180910390f35b6101dd6107cc565b005b6101e76108a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102316108d8565b604051808215151515815260200191505060405180910390f35b610282600480360360208110156102625760006000fd5b81019080803567ffffffffffffffff169060200190929190505050610935565b6040518084600360200280838360005b838110156102ae5780820151818401525b602081019050610292565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103245780820151818401525b602081019050610308565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610369610ae9565b6040518084600360200280838360005b838110156103955780820151818401525b602081019050610379565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561040b5780820151818401525b6020810190506103ef565b50505050905090810190601f1680156104385780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b61056e600480360360a081101561045f5760006000fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f820116905080830192505050505050909091929090919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104e25760006000fd5b8201836020820111156104f55760006000fd5b803590602001918460018302840111640100000000831117156105185760006000fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050909091929090919290505050610b2a565b005b6105d8600480360360608110156105875760006000fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600081840152601f19601f82011690508083019250505050505090909192909091929050505061118f565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561064b5780820151818401525b60208101905061062f565b50505050905090810190601f1680156106785780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6106ca6004803603602081101561069e5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129e565b005b60006000600160005060006106e6856112cc63ffffffff16565b6000191660001916815260200190815260200160002060005090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505061072f56505b919050565b600060006001600050600061074e856112cc63ffffffff16565b600019166000191681526020019081526020016000206000509050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159150506107c756505b919050565b6107da6108d863ffffffff16565b15156107e65760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506108d5565b90565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050610932565b90565b61093d61150e565b60006060600060016000506000600260005060008867ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060005054600019166000191681526020019081526020016000206000509050806000016000508160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260020160005082600380602002604051908101604052809291908260038015610a32576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116109ed5790505b50505050509250808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905093509350935050610ae256505b9193909250565b610af161150e565b60006060610b1a600360009054906101000a900467ffffffffffffffff1661093563ffffffff16565b925092509250610b25565b909192565b610b386108d863ffffffff16565b1515610b445760006000fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610bec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f436f6e747261637420616464726573732069732072657175697265640000000081526020015060200191505060405180910390fd5b610bfb8361073463ffffffff16565b151515610c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806116cd602e913960400191505060405180910390fd5b610c628361138f63ffffffff16565b151515610cda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f56657273696f6e206d757374206265206e6f6e207a65726f000000000000000081526020015060200191505060405180910390fd5b6000610ceb846112cc63ffffffff16565b905060405180606001604052808581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200150600160005060008360001916600019168152602001908152602001600020600050600082015181600001600050906003610d5c929190611530565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002016000509080519060200190610dc39291906115e1565b509050506000846000600381101515610dd857fe5b60200201519050600360009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff161115610e4e57846000600381101515610e2057fe5b6020020151600360006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b6000856001600381101515610e5f57fe5b602002015190506000866002600381101515610e7757fe5b60200201519050600060016000506000600260005060008767ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060005054600019166000191681526020019081526020016000206000506000016000509050610f5581600380602002604051908101604052809291908260038015610f45576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff1681526020019060080190602082600701049283019260010382029150808411610f005790505b505050505061138f63ffffffff16565b80610fa45750806001600381101515610f6a57fe5b9090600491828204019190066008025b9054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16115b806110435750806001600381101515610fb957fe5b9090600491828204019190066008025b9054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16148015611042575080600260038110151561100857fe5b9090600491828204019190066008025b9054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff16115b5b156110815784600260005060008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600050819090600019169055505b7fc5b9b96b4952fc60f5a916010c882de0324dd4fdfaa999f9ad6947f55d8427628888886040518084600360200280838360005b838110156110d15780820151818401525b6020810190506110b5565b505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111475780820151818401525b60208101905061112b565b50505050905090810190601f1680156111745780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a150505050505b5b505050565b600060606000600160005060006111ab866112cc63ffffffff16565b6000191660001916815260200190815260200160002060005090508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600201600050808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b50505050509050925092505061129956505b915091565b6112ac6108d863ffffffff16565b15156112b85760006000fd5b6112c78161141063ffffffff16565b5b5b50565b60008160006003811015156112dd57fe5b60200201518260016003811015156112f157fe5b602002015183600260038110151561130557fe5b6020020151604051602001808467ffffffffffffffff1667ffffffffffffffff1660c01b81526008018367ffffffffffffffff1667ffffffffffffffff1660c01b81526008018267ffffffffffffffff1667ffffffffffffffff1660c01b8152600801935050505060405160208183030381529060405280519060200120905061138a565b919050565b600060008260006003811015156113a257fe5b602002015167ffffffffffffffff161480156113db575060008260016003811015156113ca57fe5b602002015167ffffffffffffffff16145b8015611404575060008260026003811015156113f357fe5b602002015167ffffffffffffffff16145b905061140b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561144d5760006000fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6040518060600160405280600390602082028036833780820191505090505090565b82600390906003016004900481019282156115d05791602002820160005b8382111561159a57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550926020019260080160208160070104928301926001030261154e565b80156115ce5782816101000a81549067ffffffffffffffff021916905560080160208160070104928301926001030261159a565b505b5090506115dd9190611666565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061162257805160ff1916838001178555611655565b82800160010185558215611655579182015b828111156116545782518260005090905591602001919060010190611634565b5b50905061166291906116a1565b5090565b61169e9190611670565b8082111561169a57600081816101000a81549067ffffffffffffffff021916905550600101611670565b5090565b90565b6116c991906116ab565b808211156116c557600081815060009055506001016116ab565b5090565b9056fe476976656e2076657273696f6e20697320616c7265616479207265676973746572656420696e207061636b616765a2646970667358221220445b5c818fc479602bad4cee0239d2c777bcdcd6ad550f21c324eb6e412853b364736f6c634300060a0033",
  "compiler": {
    "name": "solc",
    "version": "0.6.10+commit.00c0fcaf.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
