{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentApproved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentArchived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "componentName",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum IComponent.ComponentType",
          "name": "componentType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "componentAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "registryAddress",
          "type": "address"
        }
      ],
      "name": "LogComponentCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentDeclined",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentPaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "componentName",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum IComponent.ComponentType",
          "name": "componentType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "componentAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentProposed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentResumed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "enum IComponent.ComponentState",
          "name": "stateOld",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "enum IComponent.ComponentState",
          "name": "stateNew",
          "type": "uint8"
        }
      ],
      "name": "LogComponentStateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentSuspended",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "LogComponentUnpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "approvalCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "archiveCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "declineCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRegistry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getState",
      "outputs": [
        {
          "internalType": "enum IComponent.ComponentState",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getType",
      "outputs": [
        {
          "internalType": "enum IComponent.ComponentType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isOracle",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isProduct",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isRiskpool",
      "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": "pauseCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposalCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "resumeCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "setId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "suspendCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpauseCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "0": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/access/Ownable.sol",
    "1": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC20/IERC20.sol",
    "14": "contracts/modules/IAccess.sol",
    "16": "contracts/modules/IComponentEvents.sol",
    "2": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/token/ERC721/IERC721.sol",
    "21": "contracts/modules/IRegistry.sol",
    "23": "contracts/services/IComponentOwnerService.sol",
    "24": "contracts/services/IInstanceOperatorService.sol",
    "25": "contracts/services/IInstanceService.sol",
    "26": "contracts/services/IOracleService.sol",
    "27": "contracts/services/IProductService.sol",
    "28": "contracts/services/IRiskpoolService.sol",
    "3": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
    "30": "contracts/tokens/IBundleToken.sol",
    "4": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/introspection/IERC165.sol",
    "6": "contracts/components/Component.sol",
    "7": "contracts/components/IComponent.sol"
  },
  "ast": {
    "absolutePath": "contracts/components/Component.sol",
    "exportedSymbols": {
      "Component": [
        708
      ],
      "Context": [
        4978
      ],
      "IAccess": [
        2660
      ],
      "IBundle": [
        2844
      ],
      "IBundleToken": [
        4649
      ],
      "IComponent": [
        812
      ],
      "IComponentEvents": [
        2897
      ],
      "IComponentOwnerService": [
        3833
      ],
      "IERC165": [
        4990
      ],
      "IERC20": [
        4956
      ],
      "IERC721": [
        4878
      ],
      "IInstanceOperatorService": [
        3984
      ],
      "IInstanceService": [
        4333
      ],
      "IOracleService": [
        4343
      ],
      "IPolicy": [
        3257
      ],
      "IPool": [
        3373
      ],
      "IProductService": [
        4488
      ],
      "IRegistry": [
        3538
      ],
      "IRiskpoolService": [
        4594
      ],
      "ITreasury": [
        3798
      ],
      "Ownable": [
        4762
      ]
    },
    "id": 709,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 290,
        "literals": [
          "solidity",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:22:6"
      },
      {
        "absolutePath": "contracts/components/IComponent.sol",
        "file": "./IComponent.sol",
        "id": 291,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 709,
        "sourceUnit": 813,
        "src": "63:26:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/modules/IAccess.sol",
        "file": "../modules/IAccess.sol",
        "id": 292,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 709,
        "sourceUnit": 2661,
        "src": "90:32:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/modules/IComponentEvents.sol",
        "file": "../modules/IComponentEvents.sol",
        "id": 293,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 709,
        "sourceUnit": 2898,
        "src": "123:41:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/modules/IRegistry.sol",
        "file": "../modules/IRegistry.sol",
        "id": 294,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 709,
        "sourceUnit": 3539,
        "src": "165:34:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/services/IComponentOwnerService.sol",
        "file": "../services/IComponentOwnerService.sol",
        "id": 295,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 709,
        "sourceUnit": 3834,
        "src": "200:48:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/services/IInstanceService.sol",
        "file": "../services/IInstanceService.sol",
        "id": 296,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 709,
        "sourceUnit": 4334,
        "src": "249:42:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 297,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 709,
        "sourceUnit": 4763,
        "src": "292:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 298,
              "name": "IComponent",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 812,
              "src": "484:10:6"
            },
            "id": 299,
            "nodeType": "InheritanceSpecifier",
            "src": "484:10:6"
          },
          {
            "baseName": {
              "id": 300,
              "name": "IComponentEvents",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2897,
              "src": "500:16:6"
            },
            "id": 301,
            "nodeType": "InheritanceSpecifier",
            "src": "500:16:6"
          },
          {
            "baseName": {
              "id": 302,
              "name": "Ownable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 4762,
              "src": "522:7:6"
            },
            "id": 303,
            "nodeType": "InheritanceSpecifier",
            "src": "522:7:6"
          }
        ],
        "contractDependencies": [
          812,
          2897,
          4762,
          4978
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 708,
        "linearizedBaseContracts": [
          708,
          4762,
          4978,
          2897,
          812
        ],
        "name": "Component",
        "nameLocation": "466:9:6",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 305,
            "mutability": "mutable",
            "name": "_componentName",
            "nameLocation": "553:14:6",
            "nodeType": "VariableDeclaration",
            "scope": 708,
            "src": "537:30:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 304,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "537:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 307,
            "mutability": "mutable",
            "name": "_componentId",
            "nameLocation": "589:12:6",
            "nodeType": "VariableDeclaration",
            "scope": 708,
            "src": "573:28:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 306,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "573:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 310,
            "mutability": "mutable",
            "name": "_componentType",
            "nameLocation": "640:14:6",
            "nodeType": "VariableDeclaration",
            "scope": 708,
            "src": "607:47:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_enum$_ComponentType_$715",
              "typeString": "enum IComponent.ComponentType"
            },
            "typeName": {
              "id": 309,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 308,
                "name": "IComponent.ComponentType",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 715,
                "src": "607:24:6"
              },
              "referencedDeclaration": 715,
              "src": "607:24:6",
              "typeDescriptions": {
                "typeIdentifier": "t_enum$_ComponentType_$715",
                "typeString": "enum IComponent.ComponentType"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 313,
            "mutability": "mutable",
            "name": "_registry",
            "nameLocation": "679:9:6",
            "nodeType": "VariableDeclaration",
            "scope": 708,
            "src": "661:27:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IRegistry_$3538",
              "typeString": "contract IRegistry"
            },
            "typeName": {
              "id": 312,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 311,
                "name": "IRegistry",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 3538,
                "src": "661:9:6"
              },
              "referencedDeclaration": 3538,
              "src": "661:9:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IRegistry_$3538",
                "typeString": "contract IRegistry"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 316,
            "mutability": "mutable",
            "name": "_access",
            "nameLocation": "710:7:6",
            "nodeType": "VariableDeclaration",
            "scope": 708,
            "src": "694:23:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAccess_$2660",
              "typeString": "contract IAccess"
            },
            "typeName": {
              "id": 315,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 314,
                "name": "IAccess",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2660,
                "src": "694:7:6"
              },
              "referencedDeclaration": 2660,
              "src": "694:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAccess_$2660",
                "typeString": "contract IAccess"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 319,
            "mutability": "mutable",
            "name": "_componentOwnerService",
            "nameLocation": "754:22:6",
            "nodeType": "VariableDeclaration",
            "scope": 708,
            "src": "723:53:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
              "typeString": "contract IComponentOwnerService"
            },
            "typeName": {
              "id": 318,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 317,
                "name": "IComponentOwnerService",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 3833,
                "src": "723:22:6"
              },
              "referencedDeclaration": 3833,
              "src": "723:22:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                "typeString": "contract IComponentOwnerService"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 322,
            "mutability": "mutable",
            "name": "_instanceService",
            "nameLocation": "807:16:6",
            "nodeType": "VariableDeclaration",
            "scope": 708,
            "src": "782:41:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IInstanceService_$4333",
              "typeString": "contract IInstanceService"
            },
            "typeName": {
              "id": 321,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 320,
                "name": "IInstanceService",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 4333,
                "src": "782:16:6"
              },
              "referencedDeclaration": 4333,
              "src": "782:16:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IInstanceService_$4333",
                "typeString": "contract IInstanceService"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 335,
              "nodeType": "Block",
              "src": "869:172:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 325,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4968,
                            "src": "901:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "901:12:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "496e7374616e63654f70657261746f7253657276696365",
                              "id": 328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "937:25:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_893eee863631637173ead46f1c66388136d13bfeb40cdedfb3bfe4f34f933544",
                                "typeString": "literal_string \"InstanceOperatorService\""
                              },
                              "value": "InstanceOperatorService"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_893eee863631637173ead46f1c66388136d13bfeb40cdedfb3bfe4f34f933544",
                                "typeString": "literal_string \"InstanceOperatorService\""
                              }
                            ],
                            "id": 327,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 707,
                            "src": "917:19:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "917:46:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "901:62:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a434d502d3030313a4e4f545f494e5354414e43455f4f50455241544f525f53455256494345",
                        "id": 331,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "977:45:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0cf129911f5ea89264cf2d932a66d14be63649422912365886718bb28b51326b",
                          "typeString": "literal_string \"ERROR:CMP-001:NOT_INSTANCE_OPERATOR_SERVICE\""
                        },
                        "value": "ERROR:CMP-001:NOT_INSTANCE_OPERATOR_SERVICE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0cf129911f5ea89264cf2d932a66d14be63649422912365886718bb28b51326b",
                          "typeString": "literal_string \"ERROR:CMP-001:NOT_INSTANCE_OPERATOR_SERVICE\""
                        }
                      ],
                      "id": 324,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "879:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "879:144:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 333,
                  "nodeType": "ExpressionStatement",
                  "src": "879:144:6"
                },
                {
                  "id": 334,
                  "nodeType": "PlaceholderStatement",
                  "src": "1033:1:6"
                }
              ]
            },
            "id": 336,
            "name": "onlyInstanceOperatorService",
            "nameLocation": "839:27:6",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 323,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "866:2:6"
            },
            "src": "830:211:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 349,
              "nodeType": "Block",
              "src": "1072:142:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 344,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 339,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4968,
                            "src": "1104:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1104:12:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "436f6d706f6e656e74",
                              "id": 342,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1140:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_20422c9fb475bf3099f246b9754fae871c7ccc7264ca39a5be99fea0688ffe24",
                                "typeString": "literal_string \"Component\""
                              },
                              "value": "Component"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_20422c9fb475bf3099f246b9754fae871c7ccc7264ca39a5be99fea0688ffe24",
                                "typeString": "literal_string \"Component\""
                              }
                            ],
                            "id": 341,
                            "name": "_getContractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 707,
                            "src": "1120:19:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1120:32:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1104:48:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a434d502d3030323a4e4f545f434f4d504f4e454e54",
                        "id": 345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1166:29:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_13d854cfce65ca3d798b24f0152adbdef51328a4972814c276101e4a34ebcd4a",
                          "typeString": "literal_string \"ERROR:CMP-002:NOT_COMPONENT\""
                        },
                        "value": "ERROR:CMP-002:NOT_COMPONENT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_13d854cfce65ca3d798b24f0152adbdef51328a4972814c276101e4a34ebcd4a",
                          "typeString": "literal_string \"ERROR:CMP-002:NOT_COMPONENT\""
                        }
                      ],
                      "id": 338,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1082:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1082:114:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 347,
                  "nodeType": "ExpressionStatement",
                  "src": "1082:114:6"
                },
                {
                  "id": 348,
                  "nodeType": "PlaceholderStatement",
                  "src": "1206:1:6"
                }
              ]
            },
            "id": 350,
            "name": "onlyComponent",
            "nameLocation": "1056:13:6",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 337,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1069:2:6"
            },
            "src": "1047:167:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 364,
              "nodeType": "Block",
              "src": "1257:155:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 353,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4968,
                            "src": "1289:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1289:12:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 357,
                              "name": "_componentOwnerService",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 319,
                              "src": "1313:22:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                                "typeString": "contract IComponentOwnerService"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                                "typeString": "contract IComponentOwnerService"
                              }
                            ],
                            "id": 356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1305:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 355,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1305:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1305:31:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1289:47:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a434d502d3030333a4e4f545f434f4d504f4e454e545f4f574e45525f53455256494345",
                        "id": 360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1350:43:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5a42b6523909db0c3f07c7fc4301f658eda0aaaedcec4492e9f126a1a0b351bc",
                          "typeString": "literal_string \"ERROR:CMP-003:NOT_COMPONENT_OWNER_SERVICE\""
                        },
                        "value": "ERROR:CMP-003:NOT_COMPONENT_OWNER_SERVICE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5a42b6523909db0c3f07c7fc4301f658eda0aaaedcec4492e9f126a1a0b351bc",
                          "typeString": "literal_string \"ERROR:CMP-003:NOT_COMPONENT_OWNER_SERVICE\""
                        }
                      ],
                      "id": 352,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1267:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1267:127:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 362,
                  "nodeType": "ExpressionStatement",
                  "src": "1267:127:6"
                },
                {
                  "id": 363,
                  "nodeType": "PlaceholderStatement",
                  "src": "1404:1:6"
                }
              ]
            },
            "id": 365,
            "name": "onlyComponentOwnerService",
            "nameLocation": "1229:25:6",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 351,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1254:2:6"
            },
            "src": "1220:192:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 429,
              "nodeType": "Block",
              "src": "1554:499:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 378,
                          "name": "registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 372,
                          "src": "1572:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1592:1:6",
                              "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": 380,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1584:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 379,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1584:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1584:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1572:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552524f523a434d502d3030343a52454749535452595f414444524553535f5a45524f",
                        "id": 384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1596:37:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5dcfc840a63d8a5a46ba6b85476b7d901628bd3e28990c52c8816700a9111acc",
                          "typeString": "literal_string \"ERROR:CMP-004:REGISTRY_ADDRESS_ZERO\""
                        },
                        "value": "ERROR:CMP-004:REGISTRY_ADDRESS_ZERO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5dcfc840a63d8a5a46ba6b85476b7d901628bd3e28990c52c8816700a9111acc",
                          "typeString": "literal_string \"ERROR:CMP-004:REGISTRY_ADDRESS_ZERO\""
                        }
                      ],
                      "id": 377,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1564:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1564:70:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 386,
                  "nodeType": "ExpressionStatement",
                  "src": "1564:70:6"
                },
                {
                  "expression": {
                    "id": 391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 387,
                      "name": "_registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 313,
                      "src": "1645:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IRegistry_$3538",
                        "typeString": "contract IRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 389,
                          "name": "registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 372,
                          "src": "1667:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 388,
                        "name": "IRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3538,
                        "src": "1657:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IRegistry_$3538_$",
                          "typeString": "type(contract IRegistry)"
                        }
                      },
                      "id": 390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1657:19:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IRegistry_$3538",
                        "typeString": "contract IRegistry"
                      }
                    },
                    "src": "1645:31:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRegistry_$3538",
                      "typeString": "contract IRegistry"
                    }
                  },
                  "id": 392,
                  "nodeType": "ExpressionStatement",
                  "src": "1645:31:6"
                },
                {
                  "expression": {
                    "id": 396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 393,
                      "name": "_access",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 316,
                      "src": "1686:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccess_$2660",
                        "typeString": "contract IAccess"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 394,
                        "name": "_getAccess",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 668,
                        "src": "1696:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAccess_$2660_$",
                          "typeString": "function () view returns (contract IAccess)"
                        }
                      },
                      "id": 395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1696:12:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAccess_$2660",
                        "typeString": "contract IAccess"
                      }
                    },
                    "src": "1686:22:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccess_$2660",
                      "typeString": "contract IAccess"
                    }
                  },
                  "id": 397,
                  "nodeType": "ExpressionStatement",
                  "src": "1686:22:6"
                },
                {
                  "expression": {
                    "id": 401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 398,
                      "name": "_componentOwnerService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 319,
                      "src": "1718:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                        "typeString": "contract IComponentOwnerService"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 399,
                        "name": "_getComponentOwnerService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 694,
                        "src": "1743:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IComponentOwnerService_$3833_$",
                          "typeString": "function () view returns (contract IComponentOwnerService)"
                        }
                      },
                      "id": 400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1743:27:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                        "typeString": "contract IComponentOwnerService"
                      }
                    },
                    "src": "1718:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                      "typeString": "contract IComponentOwnerService"
                    }
                  },
                  "id": 402,
                  "nodeType": "ExpressionStatement",
                  "src": "1718:52:6"
                },
                {
                  "expression": {
                    "id": 406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 403,
                      "name": "_instanceService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 322,
                      "src": "1780:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInstanceService_$4333",
                        "typeString": "contract IInstanceService"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 404,
                        "name": "_getInstanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 681,
                        "src": "1799:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IInstanceService_$4333_$",
                          "typeString": "function () view returns (contract IInstanceService)"
                        }
                      },
                      "id": 405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1799:21:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IInstanceService_$4333",
                        "typeString": "contract IInstanceService"
                      }
                    },
                    "src": "1780:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInstanceService_$4333",
                      "typeString": "contract IInstanceService"
                    }
                  },
                  "id": 407,
                  "nodeType": "ExpressionStatement",
                  "src": "1780:40:6"
                },
                {
                  "expression": {
                    "id": 410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 408,
                      "name": "_componentName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 305,
                      "src": "1831:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 409,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 367,
                      "src": "1848:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1831:21:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 411,
                  "nodeType": "ExpressionStatement",
                  "src": "1831:21:6"
                },
                {
                  "expression": {
                    "id": 414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 412,
                      "name": "_componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 310,
                      "src": "1862:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$715",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 413,
                      "name": "componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 370,
                      "src": "1879:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$715",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "src": "1862:30:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$715",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  "id": 415,
                  "nodeType": "ExpressionStatement",
                  "src": "1862:30:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 417,
                        "name": "_componentName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 305,
                        "src": "1941:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 418,
                        "name": "_componentType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 310,
                        "src": "1970:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ComponentType_$715",
                          "typeString": "enum IComponent.ComponentType"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 421,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2007:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Component_$708",
                              "typeString": "contract Component"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Component_$708",
                              "typeString": "contract Component"
                            }
                          ],
                          "id": 420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1999:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 419,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1999:7:6",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1999:13:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 425,
                            "name": "_registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 313,
                            "src": "2035:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IRegistry_$3538",
                              "typeString": "contract IRegistry"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IRegistry_$3538",
                              "typeString": "contract IRegistry"
                            }
                          ],
                          "id": 424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2027:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 423,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2027:7:6",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 426,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2027:18:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_enum$_ComponentType_$715",
                          "typeString": "enum IComponent.ComponentType"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 416,
                      "name": "LogComponentCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 734,
                      "src": "1908:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_enum$_ComponentType_$715_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,enum IComponent.ComponentType,address,address)"
                      }
                    },
                    "id": 427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1908:138:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 428,
                  "nodeType": "EmitStatement",
                  "src": "1903:143:6"
                }
              ]
            },
            "id": 430,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 375,
                "modifierName": {
                  "id": 374,
                  "name": "Ownable",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4762,
                  "src": "1540:7:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "1540:9:6"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 367,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "1447:4:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 430,
                  "src": "1439:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 366,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1439:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 370,
                  "mutability": "mutable",
                  "name": "componentType",
                  "nameLocation": "1486:13:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 430,
                  "src": "1461:38:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ComponentType_$715",
                    "typeString": "enum IComponent.ComponentType"
                  },
                  "typeName": {
                    "id": 369,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 368,
                      "name": "IComponent.ComponentType",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 715,
                      "src": "1461:24:6"
                    },
                    "referencedDeclaration": 715,
                    "src": "1461:24:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$715",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 372,
                  "mutability": "mutable",
                  "name": "registry",
                  "nameLocation": "1517:8:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 430,
                  "src": "1509:16:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 371,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1509:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1429:102:6"
            },
            "returnParameters": {
              "id": 376,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1554:0:6"
            },
            "scope": 708,
            "src": "1418:635:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              739
            ],
            "body": {
              "id": 442,
              "nodeType": "Block",
              "src": "2118:22:6",
              "statements": [
                {
                  "expression": {
                    "id": 440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 438,
                      "name": "_componentId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 307,
                      "src": "2120:12:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 439,
                      "name": "id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 432,
                      "src": "2135:2:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2120:17:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 441,
                  "nodeType": "ExpressionStatement",
                  "src": "2120:17:6"
                }
              ]
            },
            "functionSelector": "d0e0ba95",
            "id": 443,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 436,
                "modifierName": {
                  "id": 435,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "2104:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "2104:13:6"
              }
            ],
            "name": "setId",
            "nameLocation": "2068:5:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 434,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2095:8:6"
            },
            "parameters": {
              "id": 433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 432,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "2082:2:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "2074:10:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 431,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2074:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2073:12:6"
            },
            "returnParameters": {
              "id": 437,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2118:0:6"
            },
            "scope": 708,
            "src": "2059:81:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              744
            ],
            "body": {
              "id": 451,
              "nodeType": "Block",
              "src": "2203:26:6",
              "statements": [
                {
                  "expression": {
                    "id": 449,
                    "name": "_componentName",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 305,
                    "src": "2212:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 448,
                  "id": 450,
                  "nodeType": "Return",
                  "src": "2205:21:6"
                }
              ]
            },
            "functionSelector": "17d7de7c",
            "id": 452,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getName",
            "nameLocation": "2155:7:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 445,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2172:8:6"
            },
            "parameters": {
              "id": 444,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2162:2:6"
            },
            "returnParameters": {
              "id": 448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 447,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 452,
                  "src": "2194:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 446,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2194:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2193:9:6"
            },
            "scope": 708,
            "src": "2146:83:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              749
            ],
            "body": {
              "id": 460,
              "nodeType": "Block",
              "src": "2289:24:6",
              "statements": [
                {
                  "expression": {
                    "id": 458,
                    "name": "_componentId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 307,
                    "src": "2298:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 457,
                  "id": 459,
                  "nodeType": "Return",
                  "src": "2291:19:6"
                }
              ]
            },
            "functionSelector": "5d1ca631",
            "id": 461,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getId",
            "nameLocation": "2243:5:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 454,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2258:8:6"
            },
            "parameters": {
              "id": 453,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2248:2:6"
            },
            "returnParameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 456,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 461,
                  "src": "2280:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2280:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2279:9:6"
            },
            "scope": 708,
            "src": "2234:79:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              755
            ],
            "body": {
              "id": 470,
              "nodeType": "Block",
              "src": "2392:26:6",
              "statements": [
                {
                  "expression": {
                    "id": 468,
                    "name": "_componentType",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 310,
                    "src": "2401:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$715",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  "functionReturnParameters": 467,
                  "id": 469,
                  "nodeType": "Return",
                  "src": "2394:21:6"
                }
              ]
            },
            "functionSelector": "15dae03e",
            "id": 471,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getType",
            "nameLocation": "2327:7:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 463,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2344:8:6"
            },
            "parameters": {
              "id": 462,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2334:2:6"
            },
            "returnParameters": {
              "id": 467,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 466,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 471,
                  "src": "2366:24:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ComponentType_$715",
                    "typeString": "enum IComponent.ComponentType"
                  },
                  "typeName": {
                    "id": 465,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 464,
                      "name": "IComponent.ComponentType",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 715,
                      "src": "2366:24:6"
                    },
                    "referencedDeclaration": 715,
                    "src": "2366:24:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentType_$715",
                      "typeString": "enum IComponent.ComponentType"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2365:26:6"
            },
            "scope": 708,
            "src": "2318:100:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              761
            ],
            "body": {
              "id": 483,
              "nodeType": "Block",
              "src": "2499:60:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 480,
                        "name": "_componentId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 307,
                        "src": "2543:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 478,
                        "name": "_instanceService",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 322,
                        "src": "2508:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInstanceService_$4333",
                          "typeString": "contract IInstanceService"
                        }
                      },
                      "id": 479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getComponentState",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4135,
                      "src": "2508:34:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_enum$_ComponentState_$723_$",
                        "typeString": "function (uint256) view external returns (enum IComponent.ComponentState)"
                      }
                    },
                    "id": 481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2508:48:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentState_$723",
                      "typeString": "enum IComponent.ComponentState"
                    }
                  },
                  "functionReturnParameters": 477,
                  "id": 482,
                  "nodeType": "Return",
                  "src": "2501:55:6"
                }
              ]
            },
            "functionSelector": "1865c57d",
            "id": 484,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getState",
            "nameLocation": "2432:8:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 473,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2450:8:6"
            },
            "parameters": {
              "id": 472,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2440:2:6"
            },
            "returnParameters": {
              "id": 477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 476,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 484,
                  "src": "2472:25:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ComponentState_$723",
                    "typeString": "enum IComponent.ComponentState"
                  },
                  "typeName": {
                    "id": 475,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 474,
                      "name": "IComponent.ComponentState",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 723,
                      "src": "2472:25:6"
                    },
                    "referencedDeclaration": 723,
                    "src": "2472:25:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ComponentState_$723",
                      "typeString": "enum IComponent.ComponentState"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2471:27:6"
            },
            "scope": 708,
            "src": "2423:136:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              766
            ],
            "body": {
              "id": 493,
              "nodeType": "Block",
              "src": "2622:19:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 490,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4690,
                      "src": "2631:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2631:7:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 489,
                  "id": 492,
                  "nodeType": "Return",
                  "src": "2624:14:6"
                }
              ]
            },
            "functionSelector": "893d20e8",
            "id": 494,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOwner",
            "nameLocation": "2573:8:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 486,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2591:8:6"
            },
            "parameters": {
              "id": 485,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2581:2:6"
            },
            "returnParameters": {
              "id": 489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 488,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 494,
                  "src": "2613:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 487,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2613:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2612:9:6"
            },
            "scope": 708,
            "src": "2564:77:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              771
            ],
            "body": {
              "id": 506,
              "nodeType": "Block",
              "src": "2703:62:6",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_ComponentType_$715",
                      "typeString": "enum IComponent.ComponentType"
                    },
                    "id": 504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 500,
                      "name": "_componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 310,
                      "src": "2712:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$715",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 501,
                          "name": "IComponent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 812,
                          "src": "2730:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IComponent_$812_$",
                            "typeString": "type(contract IComponent)"
                          }
                        },
                        "id": 502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "ComponentType",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 715,
                        "src": "2730:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ComponentType_$715_$",
                          "typeString": "type(enum IComponent.ComponentType)"
                        }
                      },
                      "id": 503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Product",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 713,
                      "src": "2730:32:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$715",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "src": "2712:50:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 499,
                  "id": 505,
                  "nodeType": "Return",
                  "src": "2705:57:6"
                }
              ]
            },
            "functionSelector": "e0815f0d",
            "id": 507,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isProduct",
            "nameLocation": "2656:9:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 496,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2675:8:6"
            },
            "parameters": {
              "id": 495,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2665:2:6"
            },
            "returnParameters": {
              "id": 499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 498,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 507,
                  "src": "2697:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 497,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2697:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2696:6:6"
            },
            "scope": 708,
            "src": "2647:118:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              776
            ],
            "body": {
              "id": 519,
              "nodeType": "Block",
              "src": "2825:61:6",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_ComponentType_$715",
                      "typeString": "enum IComponent.ComponentType"
                    },
                    "id": 517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 513,
                      "name": "_componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 310,
                      "src": "2834:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$715",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 514,
                          "name": "IComponent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 812,
                          "src": "2852:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IComponent_$812_$",
                            "typeString": "type(contract IComponent)"
                          }
                        },
                        "id": 515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "ComponentType",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 715,
                        "src": "2852:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ComponentType_$715_$",
                          "typeString": "type(enum IComponent.ComponentType)"
                        }
                      },
                      "id": 516,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Oracle",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 712,
                      "src": "2852:31:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$715",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "src": "2834:49:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 512,
                  "id": 518,
                  "nodeType": "Return",
                  "src": "2827:56:6"
                }
              ]
            },
            "functionSelector": "9a82f890",
            "id": 520,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOracle",
            "nameLocation": "2779:8:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 509,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2797:8:6"
            },
            "parameters": {
              "id": 508,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2787:2:6"
            },
            "returnParameters": {
              "id": 512,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 511,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 520,
                  "src": "2819:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 510,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2819:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2818:6:6"
            },
            "scope": 708,
            "src": "2770:116:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              781
            ],
            "body": {
              "id": 532,
              "nodeType": "Block",
              "src": "2948:63:6",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_ComponentType_$715",
                      "typeString": "enum IComponent.ComponentType"
                    },
                    "id": 530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 526,
                      "name": "_componentType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 310,
                      "src": "2957:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$715",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 527,
                          "name": "IComponent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 812,
                          "src": "2975:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IComponent_$812_$",
                            "typeString": "type(contract IComponent)"
                          }
                        },
                        "id": 528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "ComponentType",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 715,
                        "src": "2975:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ComponentType_$715_$",
                          "typeString": "type(enum IComponent.ComponentType)"
                        }
                      },
                      "id": 529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Riskpool",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 714,
                      "src": "2975:33:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ComponentType_$715",
                        "typeString": "enum IComponent.ComponentType"
                      }
                    },
                    "src": "2957:51:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 525,
                  "id": 531,
                  "nodeType": "Return",
                  "src": "2950:58:6"
                }
              ]
            },
            "functionSelector": "258d560c",
            "id": 533,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isRiskpool",
            "nameLocation": "2900:10:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 522,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2920:8:6"
            },
            "parameters": {
              "id": 521,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2910:2:6"
            },
            "returnParameters": {
              "id": 525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 524,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 533,
                  "src": "2942:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 523,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2942:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2941:6:6"
            },
            "scope": 708,
            "src": "2891:120:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              787
            ],
            "body": {
              "id": 542,
              "nodeType": "Block",
              "src": "3082:21:6",
              "statements": [
                {
                  "expression": {
                    "id": 540,
                    "name": "_registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 313,
                    "src": "3091:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRegistry_$3538",
                      "typeString": "contract IRegistry"
                    }
                  },
                  "functionReturnParameters": 539,
                  "id": 541,
                  "nodeType": "Return",
                  "src": "3084:16:6"
                }
              ]
            },
            "functionSelector": "5ab1bd53",
            "id": 543,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRegistry",
            "nameLocation": "3026:11:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 535,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3049:8:6"
            },
            "parameters": {
              "id": 534,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3037:2:6"
            },
            "returnParameters": {
              "id": 539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 538,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 543,
                  "src": "3071:9:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IRegistry_$3538",
                    "typeString": "contract IRegistry"
                  },
                  "typeName": {
                    "id": 537,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 536,
                      "name": "IRegistry",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3538,
                      "src": "3071:9:6"
                    },
                    "referencedDeclaration": 3538,
                    "src": "3071:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRegistry_$3538",
                      "typeString": "contract IRegistry"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3070:11:6"
            },
            "scope": 708,
            "src": "3017:86:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              790
            ],
            "body": {
              "id": 552,
              "nodeType": "Block",
              "src": "3167:20:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 549,
                      "name": "_afterPropose",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 627,
                      "src": "3169:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3169:15:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 551,
                  "nodeType": "ExpressionStatement",
                  "src": "3169:15:6"
                }
              ]
            },
            "functionSelector": "638ce0ba",
            "id": 553,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 547,
                "modifierName": {
                  "id": 546,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "3153:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "3153:13:6"
              }
            ],
            "name": "proposalCallback",
            "nameLocation": "3118:16:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 545,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3144:8:6"
            },
            "parameters": {
              "id": 544,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3134:2:6"
            },
            "returnParameters": {
              "id": 548,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3167:0:6"
            },
            "scope": 708,
            "src": "3109:78:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              793
            ],
            "body": {
              "id": 562,
              "nodeType": "Block",
              "src": "3250:20:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 559,
                      "name": "_afterApprove",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 631,
                      "src": "3252:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 560,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3252:15:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 561,
                  "nodeType": "ExpressionStatement",
                  "src": "3252:15:6"
                }
              ]
            },
            "functionSelector": "1b867c63",
            "id": 563,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 557,
                "modifierName": {
                  "id": 556,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "3236:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "3236:13:6"
              }
            ],
            "name": "approvalCallback",
            "nameLocation": "3201:16:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 555,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3227:8:6"
            },
            "parameters": {
              "id": 554,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3217:2:6"
            },
            "returnParameters": {
              "id": 558,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3250:0:6"
            },
            "scope": 708,
            "src": "3192:78:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              796
            ],
            "body": {
              "id": 572,
              "nodeType": "Block",
              "src": "3332:20:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 569,
                      "name": "_afterDecline",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 635,
                      "src": "3334:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3334:15:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 571,
                  "nodeType": "ExpressionStatement",
                  "src": "3334:15:6"
                }
              ]
            },
            "functionSelector": "bd1fe5d0",
            "id": 573,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 567,
                "modifierName": {
                  "id": 566,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "3318:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "3318:13:6"
              }
            ],
            "name": "declineCallback",
            "nameLocation": "3284:15:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 565,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3309:8:6"
            },
            "parameters": {
              "id": 564,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3299:2:6"
            },
            "returnParameters": {
              "id": 568,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3332:0:6"
            },
            "scope": 708,
            "src": "3275:77:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              799
            ],
            "body": {
              "id": 582,
              "nodeType": "Block",
              "src": "3414:20:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 579,
                      "name": "_afterSuspend",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 639,
                      "src": "3416:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3416:15:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 581,
                  "nodeType": "ExpressionStatement",
                  "src": "3416:15:6"
                }
              ]
            },
            "functionSelector": "b3fca9bd",
            "id": 583,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 577,
                "modifierName": {
                  "id": 576,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "3400:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "3400:13:6"
              }
            ],
            "name": "suspendCallback",
            "nameLocation": "3366:15:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 575,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3391:8:6"
            },
            "parameters": {
              "id": 574,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3381:2:6"
            },
            "returnParameters": {
              "id": 578,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3414:0:6"
            },
            "scope": 708,
            "src": "3357:77:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              802
            ],
            "body": {
              "id": 592,
              "nodeType": "Block",
              "src": "3495:19:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 589,
                      "name": "_afterResume",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 643,
                      "src": "3497:12:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3497:14:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 591,
                  "nodeType": "ExpressionStatement",
                  "src": "3497:14:6"
                }
              ]
            },
            "functionSelector": "a18f5ae2",
            "id": 593,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 587,
                "modifierName": {
                  "id": 586,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "3481:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "3481:13:6"
              }
            ],
            "name": "resumeCallback",
            "nameLocation": "3448:14:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 585,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3472:8:6"
            },
            "parameters": {
              "id": 584,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3462:2:6"
            },
            "returnParameters": {
              "id": 588,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3495:0:6"
            },
            "scope": 708,
            "src": "3439:75:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              805
            ],
            "body": {
              "id": 602,
              "nodeType": "Block",
              "src": "3574:18:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 599,
                      "name": "_afterPause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 647,
                      "src": "3576:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3576:13:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 601,
                  "nodeType": "ExpressionStatement",
                  "src": "3576:13:6"
                }
              ]
            },
            "functionSelector": "d73cd992",
            "id": 603,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 597,
                "modifierName": {
                  "id": 596,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "3560:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "3560:13:6"
              }
            ],
            "name": "pauseCallback",
            "nameLocation": "3528:13:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 595,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3551:8:6"
            },
            "parameters": {
              "id": 594,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3541:2:6"
            },
            "returnParameters": {
              "id": 598,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3574:0:6"
            },
            "scope": 708,
            "src": "3519:73:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              808
            ],
            "body": {
              "id": 612,
              "nodeType": "Block",
              "src": "3654:20:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 609,
                      "name": "_afterUnpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 651,
                      "src": "3656:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3656:15:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 611,
                  "nodeType": "ExpressionStatement",
                  "src": "3656:15:6"
                }
              ]
            },
            "functionSelector": "59dacc6a",
            "id": 613,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 607,
                "modifierName": {
                  "id": 606,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "3640:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "3640:13:6"
              }
            ],
            "name": "unpauseCallback",
            "nameLocation": "3606:15:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 605,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3631:8:6"
            },
            "parameters": {
              "id": 604,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3621:2:6"
            },
            "returnParameters": {
              "id": 608,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3654:0:6"
            },
            "scope": 708,
            "src": "3597:77:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              811
            ],
            "body": {
              "id": 622,
              "nodeType": "Block",
              "src": "3736:20:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 619,
                      "name": "_afterArchive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 655,
                      "src": "3738:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3738:15:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 621,
                  "nodeType": "ExpressionStatement",
                  "src": "3738:15:6"
                }
              ]
            },
            "functionSelector": "be169e7e",
            "id": 623,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 617,
                "modifierName": {
                  "id": 616,
                  "name": "onlyComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 350,
                  "src": "3722:13:6"
                },
                "nodeType": "ModifierInvocation",
                "src": "3722:13:6"
              }
            ],
            "name": "archiveCallback",
            "nameLocation": "3688:15:6",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 615,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3713:8:6"
            },
            "parameters": {
              "id": 614,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3703:2:6"
            },
            "returnParameters": {
              "id": 618,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3736:0:6"
            },
            "scope": 708,
            "src": "3679:77:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 626,
              "nodeType": "Block",
              "src": "3923:2:6",
              "statements": []
            },
            "id": 627,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterPropose",
            "nameLocation": "3890:13:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 624,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3903:2:6"
            },
            "returnParameters": {
              "id": 625,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3923:0:6"
            },
            "scope": 708,
            "src": "3881:44:6",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 630,
              "nodeType": "Block",
              "src": "3972:2:6",
              "statements": []
            },
            "id": 631,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterApprove",
            "nameLocation": "3939:13:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 628,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3952:2:6"
            },
            "returnParameters": {
              "id": 629,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3972:0:6"
            },
            "scope": 708,
            "src": "3930:44:6",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 634,
              "nodeType": "Block",
              "src": "4021:2:6",
              "statements": []
            },
            "id": 635,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterDecline",
            "nameLocation": "3988:13:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 632,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4001:2:6"
            },
            "returnParameters": {
              "id": 633,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4021:0:6"
            },
            "scope": 708,
            "src": "3979:44:6",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 638,
              "nodeType": "Block",
              "src": "4070:2:6",
              "statements": []
            },
            "id": 639,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterSuspend",
            "nameLocation": "4037:13:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 636,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4050:2:6"
            },
            "returnParameters": {
              "id": 637,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4070:0:6"
            },
            "scope": 708,
            "src": "4028:44:6",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 642,
              "nodeType": "Block",
              "src": "4118:2:6",
              "statements": []
            },
            "id": 643,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterResume",
            "nameLocation": "4086:12:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 640,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4098:2:6"
            },
            "returnParameters": {
              "id": 641,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4118:0:6"
            },
            "scope": 708,
            "src": "4077:43:6",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 646,
              "nodeType": "Block",
              "src": "4165:2:6",
              "statements": []
            },
            "id": 647,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterPause",
            "nameLocation": "4134:11:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 644,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4145:2:6"
            },
            "returnParameters": {
              "id": 645,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4165:0:6"
            },
            "scope": 708,
            "src": "4125:42:6",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 650,
              "nodeType": "Block",
              "src": "4214:2:6",
              "statements": []
            },
            "id": 651,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterUnpause",
            "nameLocation": "4181:13:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 648,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4194:2:6"
            },
            "returnParameters": {
              "id": 649,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4214:0:6"
            },
            "scope": 708,
            "src": "4172:44:6",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 654,
              "nodeType": "Block",
              "src": "4263:2:6",
              "statements": []
            },
            "id": 655,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterArchive",
            "nameLocation": "4230:13:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 652,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4243:2:6"
            },
            "returnParameters": {
              "id": 653,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4263:0:6"
            },
            "scope": 708,
            "src": "4221:44:6",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 667,
              "nodeType": "Block",
              "src": "4325:70:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "416363657373",
                            "id": 663,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4370:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_662ef9f10158779adc6a36d83dac352a0d38be4aaefa069e4f4fdcebe6a5d3ee",
                              "typeString": "literal_string \"Access\""
                            },
                            "value": "Access"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_662ef9f10158779adc6a36d83dac352a0d38be4aaefa069e4f4fdcebe6a5d3ee",
                              "typeString": "literal_string \"Access\""
                            }
                          ],
                          "id": 662,
                          "name": "_getContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 707,
                          "src": "4350:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4350:29:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 661,
                      "name": "IAccess",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2660,
                      "src": "4342:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IAccess_$2660_$",
                        "typeString": "type(contract IAccess)"
                      }
                    },
                    "id": 665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4342:38:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccess_$2660",
                      "typeString": "contract IAccess"
                    }
                  },
                  "functionReturnParameters": 660,
                  "id": 666,
                  "nodeType": "Return",
                  "src": "4335:45:6"
                }
              ]
            },
            "id": 668,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getAccess",
            "nameLocation": "4280:10:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 656,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4290:2:6"
            },
            "returnParameters": {
              "id": 660,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 659,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 668,
                  "src": "4316:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccess_$2660",
                    "typeString": "contract IAccess"
                  },
                  "typeName": {
                    "id": 658,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 657,
                      "name": "IAccess",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2660,
                      "src": "4316:7:6"
                    },
                    "referencedDeclaration": 2660,
                    "src": "4316:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccess_$2660",
                      "typeString": "contract IAccess"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4315:9:6"
            },
            "scope": 708,
            "src": "4271:124:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 680,
              "nodeType": "Block",
              "src": "4473:88:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "496e7374616e636553657276696365",
                            "id": 676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4527:17:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9d0370d7b33c0a7e946fd67f2013156c598b4d6a70b1490bc73aacf4dc1a6f52",
                              "typeString": "literal_string \"InstanceService\""
                            },
                            "value": "InstanceService"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_9d0370d7b33c0a7e946fd67f2013156c598b4d6a70b1490bc73aacf4dc1a6f52",
                              "typeString": "literal_string \"InstanceService\""
                            }
                          ],
                          "id": 675,
                          "name": "_getContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 707,
                          "src": "4507:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 677,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4507:38:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 674,
                      "name": "IInstanceService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4333,
                      "src": "4490:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IInstanceService_$4333_$",
                        "typeString": "type(contract IInstanceService)"
                      }
                    },
                    "id": 678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4490:56:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInstanceService_$4333",
                      "typeString": "contract IInstanceService"
                    }
                  },
                  "functionReturnParameters": 673,
                  "id": 679,
                  "nodeType": "Return",
                  "src": "4483:63:6"
                }
              ]
            },
            "id": 681,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getInstanceService",
            "nameLocation": "4410:19:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 669,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4429:2:6"
            },
            "returnParameters": {
              "id": 673,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 672,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 681,
                  "src": "4455:16:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInstanceService_$4333",
                    "typeString": "contract IInstanceService"
                  },
                  "typeName": {
                    "id": 671,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 670,
                      "name": "IInstanceService",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4333,
                      "src": "4455:16:6"
                    },
                    "referencedDeclaration": 4333,
                    "src": "4455:16:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInstanceService_$4333",
                      "typeString": "contract IInstanceService"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4454:18:6"
            },
            "scope": 708,
            "src": "4401:160:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 693,
              "nodeType": "Block",
              "src": "4651:100:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "436f6d706f6e656e744f776e657253657276696365",
                            "id": 689,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4711:23:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_95855e0e8f5cd64ffc781762663437a44ef7554eea00fdb413a3a655c097a675",
                              "typeString": "literal_string \"ComponentOwnerService\""
                            },
                            "value": "ComponentOwnerService"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_95855e0e8f5cd64ffc781762663437a44ef7554eea00fdb413a3a655c097a675",
                              "typeString": "literal_string \"ComponentOwnerService\""
                            }
                          ],
                          "id": 688,
                          "name": "_getContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 707,
                          "src": "4691:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4691:44:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 687,
                      "name": "IComponentOwnerService",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3833,
                      "src": "4668:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IComponentOwnerService_$3833_$",
                        "typeString": "type(contract IComponentOwnerService)"
                      }
                    },
                    "id": 691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4668:68:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                      "typeString": "contract IComponentOwnerService"
                    }
                  },
                  "functionReturnParameters": 686,
                  "id": 692,
                  "nodeType": "Return",
                  "src": "4661:75:6"
                }
              ]
            },
            "id": 694,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getComponentOwnerService",
            "nameLocation": "4576:25:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 682,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4601:2:6"
            },
            "returnParameters": {
              "id": 686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 685,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 694,
                  "src": "4627:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                    "typeString": "contract IComponentOwnerService"
                  },
                  "typeName": {
                    "id": 684,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 683,
                      "name": "IComponentOwnerService",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3833,
                      "src": "4627:22:6"
                    },
                    "referencedDeclaration": 3833,
                    "src": "4627:22:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IComponentOwnerService_$3833",
                      "typeString": "contract IComponentOwnerService"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4626:24:6"
            },
            "scope": 708,
            "src": "4567:184:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 706,
              "nodeType": "Block",
              "src": "4840:60:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 703,
                        "name": "contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 696,
                        "src": "4880:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 701,
                        "name": "_registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 313,
                        "src": "4858:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IRegistry_$3538",
                          "typeString": "contract IRegistry"
                        }
                      },
                      "id": 702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3511,
                      "src": "4858:21:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4858:35:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 700,
                  "id": 705,
                  "nodeType": "Return",
                  "src": "4851:42:6"
                }
              ]
            },
            "id": 707,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getContractAddress",
            "nameLocation": "4766:19:6",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 697,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 696,
                  "mutability": "mutable",
                  "name": "contractName",
                  "nameLocation": "4794:12:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 707,
                  "src": "4786:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 695,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4786:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4785:22:6"
            },
            "returnParameters": {
              "id": 700,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 699,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 707,
                  "src": "4831:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 698,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4831:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4830:9:6"
            },
            "scope": 708,
            "src": "4757:143:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 709,
        "src": "448:4455:6"
      }
    ],
    "src": "39:4865:6"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "Component",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Context",
    "IAccess",
    "IBundleToken",
    "IComponent",
    "IComponentEvents",
    "IComponentOwnerService",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC165",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC20",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC721",
    "IInstanceOperatorService",
    "IInstanceService",
    "IOracleService",
    "IProductService",
    "IRegistry",
    "IRiskpoolService",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Ownable"
  ],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "kind": "dev",
    "methods": {
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "offset": [
    448,
    4903
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "a26ce02347dd3f3a70532c9fcdb8fe9f6f804282",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity 0.8.2;\n\nimport \"./IComponent.sol\";\nimport \"../modules/IAccess.sol\";\nimport \"../modules/IComponentEvents.sol\";\nimport \"../modules/IRegistry.sol\";\nimport \"../services/IComponentOwnerService.sol\";\nimport \"../services/IInstanceService.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n\n// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/GUIDELINES.md#style-guidelines\nabstract contract Component is \n    IComponent,\n    IComponentEvents,\n    Ownable \n{\n    bytes32 private _componentName;\n    uint256 private _componentId;\n    IComponent.ComponentType private _componentType;\n\n    IRegistry private _registry;\n    IAccess private _access;\n    IComponentOwnerService private _componentOwnerService;\n    IInstanceService private _instanceService;\n\n    modifier onlyInstanceOperatorService() {\n        require(\n             _msgSender() == _getContractAddress(\"InstanceOperatorService\"),\n            \"ERROR:CMP-001:NOT_INSTANCE_OPERATOR_SERVICE\");\n        _;\n    }\n\n    modifier onlyComponent() {\n        require(\n             _msgSender() == _getContractAddress(\"Component\"),\n            \"ERROR:CMP-002:NOT_COMPONENT\");\n        _;\n    }\n\n    modifier onlyComponentOwnerService() {\n        require(\n             _msgSender() == address(_componentOwnerService),\n            \"ERROR:CMP-003:NOT_COMPONENT_OWNER_SERVICE\");\n        _;\n    }\n\n    constructor(\n        bytes32 name,\n        IComponent.ComponentType componentType,\n        address registry\n    )\n        Ownable()\n    {\n        require(registry != address(0), \"ERROR:CMP-004:REGISTRY_ADDRESS_ZERO\");\n\n        _registry = IRegistry(registry);\n        _access = _getAccess();\n        _componentOwnerService = _getComponentOwnerService();\n        _instanceService = _getInstanceService();\n\n        _componentName = name;\n        _componentType = componentType;\n\n        emit LogComponentCreated(\n            _componentName, \n            _componentType, \n            address(this), \n            address(_registry));\n    }\n\n    function setId(uint256 id) external override onlyComponent { _componentId = id; }\n\n    function getName() public override view returns(bytes32) { return _componentName; }\n    function getId() public override view returns(uint256) { return _componentId; }\n    function getType() public override view returns(IComponent.ComponentType) { return _componentType; }\n    function getState() public override view returns(IComponent.ComponentState) { return _instanceService.getComponentState(_componentId); }\n    function getOwner() public override view returns(address) { return owner(); }\n\n    function isProduct() public override view returns(bool) { return _componentType == IComponent.ComponentType.Product; }\n    function isOracle() public override view returns(bool) { return _componentType == IComponent.ComponentType.Oracle; }\n    function isRiskpool() public override view returns(bool) { return _componentType == IComponent.ComponentType.Riskpool; }\n\n    function getRegistry() external override view returns(IRegistry) { return _registry; }\n\n    function proposalCallback() public override onlyComponent { _afterPropose(); }\n    function approvalCallback() public override onlyComponent { _afterApprove(); }\n    function declineCallback() public override onlyComponent { _afterDecline(); }\n    function suspendCallback() public override onlyComponent { _afterSuspend(); }\n    function resumeCallback() public override onlyComponent { _afterResume(); }\n    function pauseCallback() public override onlyComponent { _afterPause(); }\n    function unpauseCallback() public override onlyComponent { _afterUnpause(); }\n    function archiveCallback() public override onlyComponent { _afterArchive(); }\n    \n    // these functions are intended to be overwritten to implement\n    // component specific notification handling\n    function _afterPropose() internal virtual {}\n    function _afterApprove() internal virtual {}\n    function _afterDecline() internal virtual {}\n    function _afterSuspend() internal virtual {}\n    function _afterResume() internal virtual {}\n    function _afterPause() internal virtual {}\n    function _afterUnpause() internal virtual {}\n    function _afterArchive() internal virtual {}\n\n    function _getAccess() internal view returns (IAccess) {\n        return IAccess(_getContractAddress(\"Access\"));        \n    }\n\n    function _getInstanceService() internal view returns (IInstanceService) {\n        return IInstanceService(_getContractAddress(\"InstanceService\"));        \n    }\n\n    function _getComponentOwnerService() internal view returns (IComponentOwnerService) {\n        return IComponentOwnerService(_getContractAddress(\"ComponentOwnerService\"));        \n    }\n\n    function _getContractAddress(bytes32 contractName) internal view returns (address) { \n        return _registry.getContract(contractName);\n    }\n\n}\n",
  "sourceMap": "",
  "sourcePath": "contracts/components/Component.sol",
  "type": "contract"
}