{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IRiskModule",
          "name": "riskModule",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "enum IPolicyPoolConfig.RiskModuleStatus",
          "name": "newStatus",
          "type": "uint8"
        }
      ],
      "name": "RiskModuleStatusChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "assetManager",
      "outputs": [
        {
          "internalType": "contract IAssetManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IRiskModule",
          "name": "riskModule",
          "type": "address"
        }
      ],
      "name": "checkAcceptsNewPolicy",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IRiskModule",
          "name": "riskModule",
          "type": "address"
        }
      ],
      "name": "checkAcceptsResolvePolicy",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "checkRole",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role1",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "role2",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "checkRole2",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connect",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "exchange",
      "outputs": [
        {
          "internalType": "contract IExchange",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "insolvencyHook",
      "outputs": [
        {
          "internalType": "contract IInsolvencyHook",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lpWhitelist",
      "outputs": [
        {
          "internalType": "contract ILPWhitelist",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "treasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "interfaces/IPolicyPoolConfig.sol",
    "exportedSymbols": {
      "IAccessControlUpgradeable": [
        1820
      ],
      "IAssetManager": [
        13
      ],
      "IExchange": [
        195
      ],
      "IInsolvencyHook": [
        216
      ],
      "ILPWhitelist": [
        248
      ],
      "IPolicyPoolConfig": [
        516
      ],
      "IRiskModule": [
        570
      ]
    },
    "id": 517,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 397,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:23:10"
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol",
        "id": 399,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 517,
        "sourceUnit": 1427,
        "src": "64:114:10",
        "symbolAliases": [
          {
            "foreign": {
              "id": 398,
              "name": "IAccessControlUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "72:25:10",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IAssetManager.sol",
        "file": "./IAssetManager.sol",
        "id": 401,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 517,
        "sourceUnit": 14,
        "src": "179:50:10",
        "symbolAliases": [
          {
            "foreign": {
              "id": 400,
              "name": "IAssetManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "187:13:10",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IInsolvencyHook.sol",
        "file": "./IInsolvencyHook.sol",
        "id": 403,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 517,
        "sourceUnit": 217,
        "src": "230:54:10",
        "symbolAliases": [
          {
            "foreign": {
              "id": 402,
              "name": "IInsolvencyHook",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "238:15:10",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/ILPWhitelist.sol",
        "file": "./ILPWhitelist.sol",
        "id": 405,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 517,
        "sourceUnit": 249,
        "src": "285:48:10",
        "symbolAliases": [
          {
            "foreign": {
              "id": 404,
              "name": "ILPWhitelist",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "293:12:10",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IRiskModule.sol",
        "file": "./IRiskModule.sol",
        "id": 407,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 517,
        "sourceUnit": 571,
        "src": "334:46:10",
        "symbolAliases": [
          {
            "foreign": {
              "id": 406,
              "name": "IRiskModule",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "342:11:10",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IExchange.sol",
        "file": "./IExchange.sol",
        "id": 409,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 517,
        "sourceUnit": 196,
        "src": "381:42:10",
        "symbolAliases": [
          {
            "foreign": {
              "id": 408,
              "name": "IExchange",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "389:9:10",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 411,
              "name": "IAccessControlUpgradeable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1820,
              "src": "680:25:10"
            },
            "id": 412,
            "nodeType": "InheritanceSpecifier",
            "src": "680:25:10"
          }
        ],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 410,
          "nodeType": "StructuredDocumentation",
          "src": "425:223:10",
          "text": " @title IPolicyPoolAccess - Interface for the contract that handles roles for the PolicyPool and components\n @dev Interface for the contract that handles roles for the PolicyPool and components\n @author Ensuro"
        },
        "fullyImplemented": false,
        "id": 516,
        "linearizedBaseContracts": [
          516,
          1820
        ],
        "name": "IPolicyPoolConfig",
        "nameLocation": "659:17:10",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "IPolicyPoolConfig.GovernanceActions",
            "id": 442,
            "members": [
              {
                "id": 413,
                "name": "none",
                "nameLocation": "739:4:10",
                "nodeType": "EnumValue",
                "src": "739:4:10"
              },
              {
                "id": 414,
                "name": "setTreasury",
                "nameLocation": "749:11:10",
                "nodeType": "EnumValue",
                "src": "749:11:10"
              },
              {
                "id": 415,
                "name": "setAssetManager",
                "nameLocation": "805:15:10",
                "nodeType": "EnumValue",
                "src": "805:15:10"
              },
              {
                "id": 416,
                "name": "setInsolvencyHook",
                "nameLocation": "861:17:10",
                "nodeType": "EnumValue",
                "src": "861:17:10"
              },
              {
                "id": 417,
                "name": "setLPWhitelist",
                "nameLocation": "921:14:10",
                "nodeType": "EnumValue",
                "src": "921:14:10"
              },
              {
                "id": 418,
                "name": "addRiskModule",
                "nameLocation": "993:13:10",
                "nodeType": "EnumValue",
                "src": "993:13:10"
              },
              {
                "id": 419,
                "name": "removeRiskModule",
                "nameLocation": "1012:16:10",
                "nodeType": "EnumValue",
                "src": "1012:16:10"
              },
              {
                "id": 420,
                "name": "setScrPercentage",
                "nameLocation": "1071:16:10",
                "nodeType": "EnumValue",
                "src": "1071:16:10"
              },
              {
                "id": 421,
                "name": "setMoc",
                "nameLocation": "1093:6:10",
                "nodeType": "EnumValue",
                "src": "1093:6:10"
              },
              {
                "id": 422,
                "name": "setScrInterestRate",
                "nameLocation": "1105:18:10",
                "nodeType": "EnumValue",
                "src": "1105:18:10"
              },
              {
                "id": 423,
                "name": "setEnsuroFee",
                "nameLocation": "1129:12:10",
                "nodeType": "EnumValue",
                "src": "1129:12:10"
              },
              {
                "id": 424,
                "name": "setMaxScrPerPolicy",
                "nameLocation": "1147:18:10",
                "nodeType": "EnumValue",
                "src": "1147:18:10"
              },
              {
                "id": 425,
                "name": "setScrLimit",
                "nameLocation": "1171:11:10",
                "nodeType": "EnumValue",
                "src": "1171:11:10"
              },
              {
                "id": 426,
                "name": "setSharedCoverageMinPercentage",
                "nameLocation": "1188:30:10",
                "nodeType": "EnumValue",
                "src": "1188:30:10"
              },
              {
                "id": 427,
                "name": "setSharedCoveragePercentage",
                "nameLocation": "1224:27:10",
                "nodeType": "EnumValue",
                "src": "1224:27:10"
              },
              {
                "id": 428,
                "name": "setWallet",
                "nameLocation": "1257:9:10",
                "nodeType": "EnumValue",
                "src": "1257:9:10"
              },
              {
                "id": 429,
                "name": "setLiquidityRequirement",
                "nameLocation": "1305:23:10",
                "nodeType": "EnumValue",
                "src": "1305:23:10"
              },
              {
                "id": 430,
                "name": "setMaxUtilizationRate",
                "nameLocation": "1334:21:10",
                "nodeType": "EnumValue",
                "src": "1334:21:10"
              },
              {
                "id": 431,
                "name": "setPoolLoanInterestRate",
                "nameLocation": "1361:23:10",
                "nodeType": "EnumValue",
                "src": "1361:23:10"
              },
              {
                "id": 432,
                "name": "setLiquidityMin",
                "nameLocation": "1429:15:10",
                "nodeType": "EnumValue",
                "src": "1429:15:10"
              },
              {
                "id": 433,
                "name": "setLiquidityMiddle",
                "nameLocation": "1450:18:10",
                "nodeType": "EnumValue",
                "src": "1450:18:10"
              },
              {
                "id": 434,
                "name": "setLiquidityMax",
                "nameLocation": "1474:15:10",
                "nodeType": "EnumValue",
                "src": "1474:15:10"
              },
              {
                "id": 435,
                "name": "setClaimRewardsMin",
                "nameLocation": "1538:18:10",
                "nodeType": "EnumValue",
                "src": "1538:18:10"
              },
              {
                "id": 436,
                "name": "setReinvestRewardsMin",
                "nameLocation": "1562:21:10",
                "nodeType": "EnumValue",
                "src": "1562:21:10"
              },
              {
                "id": 437,
                "name": "setMaxSlippage",
                "nameLocation": "1589:14:10",
                "nodeType": "EnumValue",
                "src": "1589:14:10"
              },
              {
                "id": 438,
                "name": "setAcceptAllRMs",
                "nameLocation": "1609:15:10",
                "nodeType": "EnumValue",
                "src": "1609:15:10"
              },
              {
                "id": 439,
                "name": "setAcceptException",
                "nameLocation": "1678:18:10",
                "nodeType": "EnumValue",
                "src": "1678:18:10"
              },
              {
                "id": 440,
                "name": "setExchange",
                "nameLocation": "1771:11:10",
                "nodeType": "EnumValue",
                "src": "1771:11:10"
              },
              {
                "id": 441,
                "name": "last",
                "nameLocation": "1824:4:10",
                "nodeType": "EnumValue",
                "src": "1824:4:10"
              }
            ],
            "name": "GovernanceActions",
            "nameLocation": "715:17:10",
            "nodeType": "EnumDefinition",
            "src": "710:1122:10"
          },
          {
            "canonicalName": "IPolicyPoolConfig.RiskModuleStatus",
            "id": 447,
            "members": [
              {
                "id": 443,
                "name": "inactive",
                "nameLocation": "1864:8:10",
                "nodeType": "EnumValue",
                "src": "1864:8:10"
              },
              {
                "id": 444,
                "name": "active",
                "nameLocation": "1918:6:10",
                "nodeType": "EnumValue",
                "src": "1918:6:10"
              },
              {
                "id": 445,
                "name": "deprecated",
                "nameLocation": "1970:10:10",
                "nodeType": "EnumValue",
                "src": "1970:10:10"
              },
              {
                "id": 446,
                "name": "suspended",
                "nameLocation": "2032:9:10",
                "nodeType": "EnumValue",
                "src": "2032:9:10"
              }
            ],
            "name": "RiskModuleStatus",
            "nameLocation": "1841:16:10",
            "nodeType": "EnumDefinition",
            "src": "1836:263:10"
          },
          {
            "anonymous": false,
            "id": 455,
            "name": "RiskModuleStatusChanged",
            "nameLocation": "2109:23:10",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 450,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "riskModule",
                  "nameLocation": "2153:10:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 455,
                  "src": "2133:30:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IRiskModule_$570",
                    "typeString": "contract IRiskModule"
                  },
                  "typeName": {
                    "id": 449,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 448,
                      "name": "IRiskModule",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 570,
                      "src": "2133:11:10"
                    },
                    "referencedDeclaration": 570,
                    "src": "2133:11:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRiskModule_$570",
                      "typeString": "contract IRiskModule"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 453,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newStatus",
                  "nameLocation": "2182:9:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 455,
                  "src": "2165:26:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_RiskModuleStatus_$447",
                    "typeString": "enum IPolicyPoolConfig.RiskModuleStatus"
                  },
                  "typeName": {
                    "id": 452,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 451,
                      "name": "RiskModuleStatus",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 447,
                      "src": "2165:16:10"
                    },
                    "referencedDeclaration": 447,
                    "src": "2165:16:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_RiskModuleStatus_$447",
                      "typeString": "enum IPolicyPoolConfig.RiskModuleStatus"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2132:60:10"
            },
            "src": "2103:90:10"
          },
          {
            "functionSelector": "12d9a6ad",
            "id": 462,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkRole",
            "nameLocation": "2206:9:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 457,
                  "mutability": "mutable",
                  "name": "role",
                  "nameLocation": "2224:4:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 462,
                  "src": "2216:12:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 456,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2216:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 459,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2238:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 462,
                  "src": "2230:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 458,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2230:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2215:31:10"
            },
            "returnParameters": {
              "id": 461,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2260:0:10"
            },
            "scope": 516,
            "src": "2197:64:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "c5b8f5cf",
            "id": 471,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkRole2",
            "nameLocation": "2274:10:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 464,
                  "mutability": "mutable",
                  "name": "role1",
                  "nameLocation": "2298:5:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 471,
                  "src": "2290:13:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 463,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2290:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 466,
                  "mutability": "mutable",
                  "name": "role2",
                  "nameLocation": "2317:5:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 471,
                  "src": "2309:13:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 465,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2309:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 468,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2336:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 471,
                  "src": "2328:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 467,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2328:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2284:63:10"
            },
            "returnParameters": {
              "id": 470,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2361:0:10"
            },
            "scope": 516,
            "src": "2265:97:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "948cb719",
            "id": 474,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "connect",
            "nameLocation": "2375:7:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 472,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2382:2:10"
            },
            "returnParameters": {
              "id": 473,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2393:0:10"
            },
            "scope": 516,
            "src": "2366:28:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "94217ad1",
            "id": 480,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "assetManager",
            "nameLocation": "2407:12:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 475,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2419:2:10"
            },
            "returnParameters": {
              "id": 479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 478,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 480,
                  "src": "2445:13:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAssetManager_$13",
                    "typeString": "contract IAssetManager"
                  },
                  "typeName": {
                    "id": 477,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 476,
                      "name": "IAssetManager",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 13,
                      "src": "2445:13:10"
                    },
                    "referencedDeclaration": 13,
                    "src": "2445:13:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAssetManager_$13",
                      "typeString": "contract IAssetManager"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2444:15:10"
            },
            "scope": 516,
            "src": "2398:62:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "1455cd28",
            "id": 486,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "insolvencyHook",
            "nameLocation": "2473:14:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 481,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2487:2:10"
            },
            "returnParameters": {
              "id": 485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 484,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 486,
                  "src": "2513:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInsolvencyHook_$216",
                    "typeString": "contract IInsolvencyHook"
                  },
                  "typeName": {
                    "id": 483,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 482,
                      "name": "IInsolvencyHook",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 216,
                      "src": "2513:15:10"
                    },
                    "referencedDeclaration": 216,
                    "src": "2513:15:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInsolvencyHook_$216",
                      "typeString": "contract IInsolvencyHook"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2512:17:10"
            },
            "scope": 516,
            "src": "2464:66:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "63b12da8",
            "id": 492,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "lpWhitelist",
            "nameLocation": "2543:11:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 487,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2554:2:10"
            },
            "returnParameters": {
              "id": 491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 490,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 492,
                  "src": "2580:12:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILPWhitelist_$248",
                    "typeString": "contract ILPWhitelist"
                  },
                  "typeName": {
                    "id": 489,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 488,
                      "name": "ILPWhitelist",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 248,
                      "src": "2580:12:10"
                    },
                    "referencedDeclaration": 248,
                    "src": "2580:12:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILPWhitelist_$248",
                      "typeString": "contract ILPWhitelist"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2579:14:10"
            },
            "scope": 516,
            "src": "2534:60:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "d2f7265a",
            "id": 498,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchange",
            "nameLocation": "2607:8:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 493,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2615:2:10"
            },
            "returnParameters": {
              "id": 497,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 496,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 498,
                  "src": "2641:9:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IExchange_$195",
                    "typeString": "contract IExchange"
                  },
                  "typeName": {
                    "id": 495,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 494,
                      "name": "IExchange",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 195,
                      "src": "2641:9:10"
                    },
                    "referencedDeclaration": 195,
                    "src": "2641:9:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExchange_$195",
                      "typeString": "contract IExchange"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2640:11:10"
            },
            "scope": 516,
            "src": "2598:54:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "61d027b3",
            "id": 503,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "treasury",
            "nameLocation": "2665:8:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 499,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2673:2:10"
            },
            "returnParameters": {
              "id": 502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 501,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 503,
                  "src": "2699:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 500,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2699:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2698:9:10"
            },
            "scope": 516,
            "src": "2656:52:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "bbfb8bae",
            "id": 509,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkAcceptsNewPolicy",
            "nameLocation": "2721:21:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 506,
                  "mutability": "mutable",
                  "name": "riskModule",
                  "nameLocation": "2755:10:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 509,
                  "src": "2743:22:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IRiskModule_$570",
                    "typeString": "contract IRiskModule"
                  },
                  "typeName": {
                    "id": 505,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 504,
                      "name": "IRiskModule",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 570,
                      "src": "2743:11:10"
                    },
                    "referencedDeclaration": 570,
                    "src": "2743:11:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRiskModule_$570",
                      "typeString": "contract IRiskModule"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2742:24:10"
            },
            "returnParameters": {
              "id": 508,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2780:0:10"
            },
            "scope": 516,
            "src": "2712:69:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "878ccf78",
            "id": 515,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkAcceptsResolvePolicy",
            "nameLocation": "2794:25:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 512,
                  "mutability": "mutable",
                  "name": "riskModule",
                  "nameLocation": "2832:10:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 515,
                  "src": "2820:22:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IRiskModule_$570",
                    "typeString": "contract IRiskModule"
                  },
                  "typeName": {
                    "id": 511,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 510,
                      "name": "IRiskModule",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 570,
                      "src": "2820:11:10"
                    },
                    "referencedDeclaration": 570,
                    "src": "2820:11:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IRiskModule_$570",
                      "typeString": "contract IRiskModule"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2819:24:10"
            },
            "returnParameters": {
              "id": 514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2857:0:10"
            },
            "scope": 516,
            "src": "2785:73:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 517,
        "src": "649:2211:10",
        "usedErrors": []
      }
    ],
    "src": "39:2822:10"
  },
  "contractName": "IPolicyPoolConfig",
  "dependencies": [
    "IAccessControlUpgradeable",
    "IAssetManager",
    "IERC20",
    "IEToken",
    "IExchange",
    "IInsolvencyHook",
    "ILPWhitelist",
    "IRiskModule"
  ],
  "offset": [
    649,
    2860
  ],
  "sha1": "bf134a248aee81f10e357d4bbcf55f1108d9b1e6",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\nimport {IAccessControlUpgradeable} from \"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol\";\nimport {IAssetManager} from \"./IAssetManager.sol\";\nimport {IInsolvencyHook} from \"./IInsolvencyHook.sol\";\nimport {ILPWhitelist} from \"./ILPWhitelist.sol\";\nimport {IRiskModule} from \"./IRiskModule.sol\";\nimport {IExchange} from \"./IExchange.sol\";\n\n/**\n * @title IPolicyPoolAccess - Interface for the contract that handles roles for the PolicyPool and components\n * @dev Interface for the contract that handles roles for the PolicyPool and components\n * @author Ensuro\n */\ninterface IPolicyPoolConfig is IAccessControlUpgradeable {\n  enum GovernanceActions {\n    none,\n    setTreasury, // Changes PolicyPool treasury address\n    setAssetManager, // Changes PolicyPool AssetManager\n    setInsolvencyHook, // Changes PolicyPool InsolvencyHook\n    setLPWhitelist, // Changes PolicyPool Liquidity Providers Whitelist\n    addRiskModule,\n    removeRiskModule,\n    // RiskModule Governance Actions\n    setScrPercentage,\n    setMoc,\n    setScrInterestRate,\n    setEnsuroFee,\n    setMaxScrPerPolicy,\n    setScrLimit,\n    setSharedCoverageMinPercentage,\n    setSharedCoveragePercentage,\n    setWallet,\n    // EToken Governance Actions\n    setLiquidityRequirement,\n    setMaxUtilizationRate,\n    setPoolLoanInterestRate,\n    // AssetManager Governance Actions\n    setLiquidityMin,\n    setLiquidityMiddle,\n    setLiquidityMax,\n    // AaveAssetManager Governance Actions\n    setClaimRewardsMin,\n    setReinvestRewardsMin,\n    setMaxSlippage,\n    setAcceptAllRMs, // EToken Governance action  - value == boolean\n    setAcceptException, // EToken Governance action - value == (!isException << 255)|address\n    setExchange, // Changes exchange helper contract\n    last\n  }\n\n  enum RiskModuleStatus {\n    inactive, // newPolicy and resolvePolicy rejected\n    active, // newPolicy and resolvePolicy accepted\n    deprecated, // newPolicy rejected, resolvePolicy accepted\n    suspended // newPolicy and resolvePolicy rejected (temporarily)\n  }\n\n  event RiskModuleStatusChanged(IRiskModule indexed riskModule, RiskModuleStatus newStatus);\n\n  function checkRole(bytes32 role, address account) external view;\n\n  function checkRole2(\n    bytes32 role1,\n    bytes32 role2,\n    address account\n  ) external view;\n\n  function connect() external;\n\n  function assetManager() external view returns (IAssetManager);\n\n  function insolvencyHook() external view returns (IInsolvencyHook);\n\n  function lpWhitelist() external view returns (ILPWhitelist);\n\n  function exchange() external view returns (IExchange);\n\n  function treasury() external view returns (address);\n\n  function checkAcceptsNewPolicy(IRiskModule riskModule) external view;\n\n  function checkAcceptsResolvePolicy(IRiskModule riskModule) external view;\n}\n",
  "type": "interface"
}