{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IPolicyPool",
          "name": "policyPool_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "OutOfCashGranted",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "cashGranted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IEToken",
          "name": "eToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "paymentAmount",
          "type": "uint256"
        }
      ],
      "name": "insolventEToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "paymentAmount",
          "type": "uint256"
        }
      ],
      "name": "outOfCash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "policyPool",
      "outputs": [
        {
          "internalType": "contract IPolicyPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "104": "node_modules/@openzeppelin/contracts/utils/Address.sol",
    "14": "contracts/WadRayMath.sol",
    "20": "contracts/mocks/FreeGrantInsolvencyHook.sol",
    "21": "contracts/mocks/IMintableERC20.sol",
    "31": "interfaces/IAssetManager.sol",
    "32": "interfaces/IEToken.sol",
    "33": "interfaces/IExchange.sol",
    "34": "interfaces/IInsolvencyHook.sol",
    "35": "interfaces/ILPWhitelist.sol",
    "37": "interfaces/IPolicyPool.sol",
    "38": "interfaces/IPolicyPoolComponent.sol",
    "39": "interfaces/IPolicyPoolConfig.sol",
    "40": "interfaces/IRiskModule.sol",
    "97": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
    "98": "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
    "99": "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"
  },
  "ast": {
    "absolutePath": "contracts/mocks/FreeGrantInsolvencyHook.sol",
    "exportedSymbols": {
      "FreeGrantInsolvencyHook": [
        12967
      ],
      "IERC20": [
        16706
      ],
      "IEToken": [
        16628
      ],
      "IInsolvencyHook": [
        17414
      ],
      "IMintableERC20": [
        12985
      ],
      "IPolicyPool": [
        14671
      ],
      "IPolicyPoolComponent": [
        19141
      ],
      "SafeERC20": [
        16495
      ],
      "WadRayMath": [
        11252
      ]
    },
    "id": 12968,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12830,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:23:20"
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 12832,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12968,
        "sourceUnit": 16707,
        "src": "64:70:20",
        "symbolAliases": [
          {
            "foreign": {
              "id": 12831,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "72:6:20",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "id": 12834,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12968,
        "sourceUnit": 16496,
        "src": "135:82:20",
        "symbolAliases": [
          {
            "foreign": {
              "id": 12833,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "143:9:20",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IPolicyPool.sol",
        "file": "../../interfaces/IPolicyPool.sol",
        "id": 12836,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12968,
        "sourceUnit": 14672,
        "src": "218:61:20",
        "symbolAliases": [
          {
            "foreign": {
              "id": 12835,
              "name": "IPolicyPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "226:11:20",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IPolicyPoolComponent.sol",
        "file": "../../interfaces/IPolicyPoolComponent.sol",
        "id": 12838,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12968,
        "sourceUnit": 19142,
        "src": "280:79:20",
        "symbolAliases": [
          {
            "foreign": {
              "id": 12837,
              "name": "IPolicyPoolComponent",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "288:20:20",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IInsolvencyHook.sol",
        "file": "../../interfaces/IInsolvencyHook.sol",
        "id": 12840,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12968,
        "sourceUnit": 17415,
        "src": "360:69:20",
        "symbolAliases": [
          {
            "foreign": {
              "id": 12839,
              "name": "IInsolvencyHook",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "368:15:20",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IEToken.sol",
        "file": "../../interfaces/IEToken.sol",
        "id": 12842,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12968,
        "sourceUnit": 16629,
        "src": "430:53:20",
        "symbolAliases": [
          {
            "foreign": {
              "id": 12841,
              "name": "IEToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "438:7:20",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/WadRayMath.sol",
        "file": "../WadRayMath.sol",
        "id": 12844,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12968,
        "sourceUnit": 11253,
        "src": "484:45:20",
        "symbolAliases": [
          {
            "foreign": {
              "id": 12843,
              "name": "WadRayMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "492:10:20",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/mocks/IMintableERC20.sol",
        "file": "./IMintableERC20.sol",
        "id": 12846,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 12968,
        "sourceUnit": 12986,
        "src": "530:52:20",
        "symbolAliases": [
          {
            "foreign": {
              "id": 12845,
              "name": "IMintableERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "538:14:20",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 12847,
              "name": "IInsolvencyHook",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 17414,
              "src": "620:15:20"
            },
            "id": 12848,
            "nodeType": "InheritanceSpecifier",
            "src": "620:15:20"
          },
          {
            "baseName": {
              "id": 12849,
              "name": "IPolicyPoolComponent",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19141,
              "src": "637:20:20"
            },
            "id": 12850,
            "nodeType": "InheritanceSpecifier",
            "src": "637:20:20"
          }
        ],
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 12967,
        "linearizedBaseContracts": [
          12967,
          19141,
          17414
        ],
        "name": "FreeGrantInsolvencyHook",
        "nameLocation": "593:23:20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 12854,
            "libraryName": {
              "id": 12851,
              "name": "SafeERC20",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 16495,
              "src": "668:9:20"
            },
            "nodeType": "UsingForDirective",
            "src": "662:27:20",
            "typeName": {
              "id": 12853,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 12852,
                "name": "IERC20",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 16706,
                "src": "682:6:20"
              },
              "referencedDeclaration": 16706,
              "src": "682:6:20",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$16706",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 12857,
            "libraryName": {
              "id": 12855,
              "name": "WadRayMath",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 11252,
              "src": "698:10:20"
            },
            "nodeType": "UsingForDirective",
            "src": "692:29:20",
            "typeName": {
              "id": 12856,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "713:7:20",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 12860,
            "mutability": "mutable",
            "name": "_policyPool",
            "nameLocation": "746:11:20",
            "nodeType": "VariableDeclaration",
            "scope": 12967,
            "src": "725:32:20",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IPolicyPool_$14671",
              "typeString": "contract IPolicyPool"
            },
            "typeName": {
              "id": 12859,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 12858,
                "name": "IPolicyPool",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 14671,
                "src": "725:11:20"
              },
              "referencedDeclaration": 14671,
              "src": "725:11:20",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                "typeString": "contract IPolicyPool"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "c5cc79ae",
            "id": 12862,
            "mutability": "mutable",
            "name": "cashGranted",
            "nameLocation": "776:11:20",
            "nodeType": "VariableDeclaration",
            "scope": 12967,
            "src": "761:26:20",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 12861,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "761:7:20",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 12876,
              "nodeType": "Block",
              "src": "818:98:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 12865,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "832:3:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 12866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "832:10:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 12869,
                              "name": "_policyPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12860,
                              "src": "854:11:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                                "typeString": "contract IPolicyPool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                                "typeString": "contract IPolicyPool"
                              }
                            ],
                            "id": 12868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "846:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12867,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "846:7:20",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 12870,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "846:20:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "832:34:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5468652063616c6c6572206d7573742062652074686520506f6c696379506f6f6c",
                        "id": 12872,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "868:35:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d0a356323ce3e3c29a3e2bb48578fedab9a434614d6f39614688cfd87c4b961",
                          "typeString": "literal_string \"The caller must be the PolicyPool\""
                        },
                        "value": "The caller must be the PolicyPool"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d0a356323ce3e3c29a3e2bb48578fedab9a434614d6f39614688cfd87c4b961",
                          "typeString": "literal_string \"The caller must be the PolicyPool\""
                        }
                      ],
                      "id": 12864,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "824:7:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "824:80:20",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12874,
                  "nodeType": "ExpressionStatement",
                  "src": "824:80:20"
                },
                {
                  "id": 12875,
                  "nodeType": "PlaceholderStatement",
                  "src": "910:1:20"
                }
              ]
            },
            "id": 12877,
            "name": "onlyPolicyPool",
            "nameLocation": "801:14:20",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12863,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "815:2:20"
            },
            "src": "792:124:20",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "id": 12881,
            "name": "OutOfCashGranted",
            "nameLocation": "926:16:20",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12880,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12879,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "951:6:20",
                  "nodeType": "VariableDeclaration",
                  "scope": 12881,
                  "src": "943:14:20",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12878,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "943:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "942:16:20"
            },
            "src": "920:39:20"
          },
          {
            "body": {
              "id": 12891,
              "nodeType": "Block",
              "src": "1000:36:20",
              "statements": [
                {
                  "expression": {
                    "id": 12889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12887,
                      "name": "_policyPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12860,
                      "src": "1006:11:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                        "typeString": "contract IPolicyPool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12888,
                      "name": "policyPool_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12884,
                      "src": "1020:11:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                        "typeString": "contract IPolicyPool"
                      }
                    },
                    "src": "1006:25:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                      "typeString": "contract IPolicyPool"
                    }
                  },
                  "id": 12890,
                  "nodeType": "ExpressionStatement",
                  "src": "1006:25:20"
                }
              ]
            },
            "id": 12892,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12885,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12884,
                  "mutability": "mutable",
                  "name": "policyPool_",
                  "nameLocation": "987:11:20",
                  "nodeType": "VariableDeclaration",
                  "scope": 12892,
                  "src": "975:23:20",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                    "typeString": "contract IPolicyPool"
                  },
                  "typeName": {
                    "id": 12883,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 12882,
                      "name": "IPolicyPool",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14671,
                      "src": "975:11:20"
                    },
                    "referencedDeclaration": 14671,
                    "src": "975:11:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                      "typeString": "contract IPolicyPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "974:25:20"
            },
            "returnParameters": {
              "id": 12886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1000:0:20"
            },
            "scope": 12967,
            "src": "963:73:20",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              19140
            ],
            "body": {
              "id": 12901,
              "nodeType": "Block",
              "src": "1105:29:20",
              "statements": [
                {
                  "expression": {
                    "id": 12899,
                    "name": "_policyPool",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12860,
                    "src": "1118:11:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                      "typeString": "contract IPolicyPool"
                    }
                  },
                  "functionReturnParameters": 12898,
                  "id": 12900,
                  "nodeType": "Return",
                  "src": "1111:18:20"
                }
              ]
            },
            "functionSelector": "4d15eb03",
            "id": 12902,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "policyPool",
            "nameLocation": "1049:10:20",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12894,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1074:8:20"
            },
            "parameters": {
              "id": 12893,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1059:2:20"
            },
            "returnParameters": {
              "id": 12898,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12897,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12902,
                  "src": "1092:11:20",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                    "typeString": "contract IPolicyPool"
                  },
                  "typeName": {
                    "id": 12896,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 12895,
                      "name": "IPolicyPool",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14671,
                      "src": "1092:11:20"
                    },
                    "referencedDeclaration": 14671,
                    "src": "1092:11:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                      "typeString": "contract IPolicyPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1091:13:20"
            },
            "scope": 12967,
            "src": "1040:94:20",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17404
            ],
            "body": {
              "id": 12955,
              "nodeType": "Block",
              "src": "1213:305:20",
              "statements": [
                {
                  "assignments": [
                    12912
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12912,
                      "mutability": "mutable",
                      "name": "currency",
                      "nameLocation": "1226:8:20",
                      "nodeType": "VariableDeclaration",
                      "scope": 12955,
                      "src": "1219:15:20",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$16706",
                        "typeString": "contract IERC20"
                      },
                      "typeName": {
                        "id": 12911,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 12910,
                          "name": "IERC20",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 16706,
                          "src": "1219:6:20"
                        },
                        "referencedDeclaration": 16706,
                        "src": "1219:6:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$16706",
                          "typeString": "contract IERC20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12916,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 12913,
                        "name": "_policyPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12860,
                        "src": "1237:11:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                          "typeString": "contract IPolicyPool"
                        }
                      },
                      "id": 12914,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currency",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14572,
                      "src": "1237:20:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IERC20Metadata_$16271_$",
                        "typeString": "function () view external returns (contract IERC20Metadata)"
                      }
                    },
                    "id": 12915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1237:22:20",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Metadata_$16271",
                      "typeString": "contract IERC20Metadata"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1219:40:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 12926,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1312:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FreeGrantInsolvencyHook_$12967",
                              "typeString": "contract FreeGrantInsolvencyHook"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FreeGrantInsolvencyHook_$12967",
                              "typeString": "contract FreeGrantInsolvencyHook"
                            }
                          ],
                          "id": 12925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1304:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12924,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1304:7:20",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12927,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1304:13:20",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12928,
                        "name": "paymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12904,
                        "src": "1319:13:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 12920,
                                "name": "currency",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12912,
                                "src": "1288:8:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$16706",
                                  "typeString": "contract IERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$16706",
                                  "typeString": "contract IERC20"
                                }
                              ],
                              "id": 12919,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1280:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 12918,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1280:7:20",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 12921,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1280:17:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 12917,
                          "name": "IMintableERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12985,
                          "src": "1265:14:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IMintableERC20_$12985_$",
                            "typeString": "type(contract IMintableERC20)"
                          }
                        },
                        "id": 12922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1265:33:20",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMintableERC20_$12985",
                          "typeString": "contract IMintableERC20"
                        }
                      },
                      "id": 12923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12977,
                      "src": "1265:38:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 12929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1265:68:20",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12930,
                  "nodeType": "ExpressionStatement",
                  "src": "1265:68:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 12936,
                            "name": "_policyPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12860,
                            "src": "1364:11:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                              "typeString": "contract IPolicyPool"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                              "typeString": "contract IPolicyPool"
                            }
                          ],
                          "id": 12935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1356:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12934,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1356:7:20",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1356:20:20",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12938,
                        "name": "paymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12904,
                        "src": "1378:13:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 12931,
                        "name": "currency",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12912,
                        "src": "1339:8:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$16706",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 12933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16675,
                      "src": "1339:16:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 12939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1339:53:20",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12940,
                  "nodeType": "ExpressionStatement",
                  "src": "1339:53:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12944,
                        "name": "paymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12904,
                        "src": "1423:13:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 12941,
                        "name": "_policyPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12860,
                        "src": "1398:11:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                          "typeString": "contract IPolicyPool"
                        }
                      },
                      "id": 12943,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "receiveGrant",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14622,
                      "src": "1398:24:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 12945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1398:39:20",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12946,
                  "nodeType": "ExpressionStatement",
                  "src": "1398:39:20"
                },
                {
                  "expression": {
                    "id": 12949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12947,
                      "name": "cashGranted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12862,
                      "src": "1443:11:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 12948,
                      "name": "paymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12904,
                      "src": "1458:13:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1443:28:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12950,
                  "nodeType": "ExpressionStatement",
                  "src": "1443:28:20"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12952,
                        "name": "paymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12904,
                        "src": "1499:13:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12951,
                      "name": "OutOfCashGranted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12881,
                      "src": "1482:16:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 12953,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1482:31:20",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12954,
                  "nodeType": "EmitStatement",
                  "src": "1477:36:20"
                }
              ]
            },
            "functionSelector": "ee842dda",
            "id": 12956,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 12908,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12907,
                  "name": "onlyPolicyPool",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 12877,
                  "src": "1198:14:20"
                },
                "nodeType": "ModifierInvocation",
                "src": "1198:14:20"
              }
            ],
            "name": "outOfCash",
            "nameLocation": "1147:9:20",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12906,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1189:8:20"
            },
            "parameters": {
              "id": 12905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12904,
                  "mutability": "mutable",
                  "name": "paymentAmount",
                  "nameLocation": "1165:13:20",
                  "nodeType": "VariableDeclaration",
                  "scope": 12956,
                  "src": "1157:21:20",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12903,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1157:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1156:23:20"
            },
            "returnParameters": {
              "id": 12909,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1213:0:20"
            },
            "scope": 12967,
            "src": "1138:380:20",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              17413
            ],
            "body": {
              "id": 12965,
              "nodeType": "Block",
              "src": "1651:2:20",
              "statements": []
            },
            "functionSelector": "9950de50",
            "id": 12966,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "insolventEToken",
            "nameLocation": "1578:15:20",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12963,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1642:8:20"
            },
            "parameters": {
              "id": 12962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12959,
                  "mutability": "mutable",
                  "name": "eToken",
                  "nameLocation": "1602:6:20",
                  "nodeType": "VariableDeclaration",
                  "scope": 12966,
                  "src": "1594:14:20",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IEToken_$16628",
                    "typeString": "contract IEToken"
                  },
                  "typeName": {
                    "id": 12958,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 12957,
                      "name": "IEToken",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 16628,
                      "src": "1594:7:20"
                    },
                    "referencedDeclaration": 16628,
                    "src": "1594:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IEToken_$16628",
                      "typeString": "contract IEToken"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12961,
                  "mutability": "mutable",
                  "name": "paymentAmount",
                  "nameLocation": "1618:13:20",
                  "nodeType": "VariableDeclaration",
                  "scope": 12966,
                  "src": "1610:21:20",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12960,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1610:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1593:39:20"
            },
            "returnParameters": {
              "id": 12964,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1651:0:20"
            },
            "scope": 12967,
            "src": "1569:84:20",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 12968,
        "src": "584:1071:20",
        "usedErrors": []
      }
    ],
    "src": "39:1617:20"
  },
  "bytecode": "608060405234801561001057600080fd5b506040516104c13803806104c183398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61042e806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634d15eb03146100515780639950de5014610071578063c5cc79ae14610085578063ee842dda1461009c575b600080fd5b6000546040516001600160a01b0390911681526020015b60405180910390f35b61008361007f366004610375565b5050565b005b61008e60015481565b604051908152602001610068565b6100836100aa3660046103a1565b6000546001600160a01b031633146101125760405162461bcd60e51b815260206004820152602160248201527f5468652063616c6c6572206d7573742062652074686520506f6c696379506f6f6044820152601b60fa1b606482015260840160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663e5a6b10f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561016157600080fd5b505afa158015610175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101999190610358565b6040516340c10f1960e01b8152306004820152602481018490529091506001600160a01b038216906340c10f1990604401600060405180830381600087803b1580156101e457600080fd5b505af11580156101f8573d6000803e3d6000fd5b505060005460405163095ea7b360e01b81526001600160a01b03918216600482015260248101869052908416925063095ea7b39150604401602060405180830381600087803b15801561024a57600080fd5b505af115801561025e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610282919061032f565b506000546040516381ced71f60e01b8152600481018490526001600160a01b03909116906381ced71f90602401600060405180830381600087803b1580156102c957600080fd5b505af11580156102dd573d6000803e3d6000fd5b5050505081600160008282546102f391906103ba565b90915550506040518281527fbd74595718bce69dfe31366c1c3c32bb9354762d4b49d8ca1eeb04007fc19f759060200160405180910390a15050565b60006020828403121561034157600080fd5b8151801515811461035157600080fd5b9392505050565b60006020828403121561036a57600080fd5b8151610351816103e0565b6000806040838503121561038857600080fd5b8235610393816103e0565b946020939093013593505050565b6000602082840312156103b357600080fd5b5035919050565b600082198211156103db57634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b03811681146103f557600080fd5b5056fea2646970667358221220fb2f01d4501dbede11bc6c92df5a08109586173effbf4c601bc66638aca0c25164736f6c63430008060033",
  "bytecodeSha1": "64be21bdf608cebe557ac3a64e063128f5d4ec92",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.6+commit.11564f7e"
  },
  "contractName": "FreeGrantInsolvencyHook",
  "coverageMap": {
    "branches": {
      "104": {},
      "14": {},
      "20": {},
      "21": {},
      "31": {},
      "32": {},
      "33": {},
      "34": {},
      "35": {},
      "37": {},
      "38": {},
      "39": {},
      "40": {},
      "97": {},
      "98": {},
      "99": {}
    },
    "statements": {
      "104": {},
      "14": {},
      "20": {
        "FreeGrantInsolvencyHook.outOfCash": {
          "1": [
            1265,
            1333
          ],
          "2": [
            1339,
            1392
          ],
          "3": [
            1398,
            1437
          ],
          "4": [
            1443,
            1471
          ],
          "5": [
            1477,
            1513
          ]
        },
        "FreeGrantInsolvencyHook.policyPool": {
          "0": [
            1111,
            1129
          ]
        }
      },
      "21": {},
      "31": {},
      "32": {},
      "33": {},
      "34": {},
      "35": {},
      "37": {},
      "38": {},
      "39": {},
      "40": {},
      "97": {},
      "98": {},
      "99": {}
    }
  },
  "dependencies": [
    "Address",
    "IAssetManager",
    "IERC20",
    "IERC20Metadata",
    "IEToken",
    "IExchange",
    "IInsolvencyHook",
    "ILPWhitelist",
    "IMintableERC20",
    "IPolicyPool",
    "IPolicyPoolComponent",
    "IPolicyPoolConfig",
    "IPriceOracle",
    "IRiskModule",
    "SafeERC20",
    "WadRayMath"
  ],
  "deployedBytecode": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80634d15eb03146100515780639950de5014610071578063c5cc79ae14610085578063ee842dda1461009c575b600080fd5b6000546040516001600160a01b0390911681526020015b60405180910390f35b61008361007f366004610375565b5050565b005b61008e60015481565b604051908152602001610068565b6100836100aa3660046103a1565b6000546001600160a01b031633146101125760405162461bcd60e51b815260206004820152602160248201527f5468652063616c6c6572206d7573742062652074686520506f6c696379506f6f6044820152601b60fa1b606482015260840160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663e5a6b10f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561016157600080fd5b505afa158015610175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101999190610358565b6040516340c10f1960e01b8152306004820152602481018490529091506001600160a01b038216906340c10f1990604401600060405180830381600087803b1580156101e457600080fd5b505af11580156101f8573d6000803e3d6000fd5b505060005460405163095ea7b360e01b81526001600160a01b03918216600482015260248101869052908416925063095ea7b39150604401602060405180830381600087803b15801561024a57600080fd5b505af115801561025e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610282919061032f565b506000546040516381ced71f60e01b8152600481018490526001600160a01b03909116906381ced71f90602401600060405180830381600087803b1580156102c957600080fd5b505af11580156102dd573d6000803e3d6000fd5b5050505081600160008282546102f391906103ba565b90915550506040518281527fbd74595718bce69dfe31366c1c3c32bb9354762d4b49d8ca1eeb04007fc19f759060200160405180910390a15050565b60006020828403121561034157600080fd5b8151801515811461035157600080fd5b9392505050565b60006020828403121561036a57600080fd5b8151610351816103e0565b6000806040838503121561038857600080fd5b8235610393816103e0565b946020939093013593505050565b6000602082840312156103b357600080fd5b5035919050565b600082198211156103db57634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b03811681146103f557600080fd5b5056fea2646970667358221220fb2f01d4501dbede11bc6c92df5a08109586173effbf4c601bc66638aca0c25164736f6c63430008060033",
  "deployedSourceMap": "584:1071:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1040:94;1092:11;1118;1040:94;;-1:-1:-1;;;;;1118:11:20;;;1576:51:114;;1564:2;1549:18;1040:94:20;;;;;;;;1569:84;;;;;;:::i;:::-;;;;;;761:26;;;;;;;;;2186:25:114;;;2174:2;2159:18;761:26:20;2141:76:114;1138:380:20;;;;;;:::i;:::-;854:11;;-1:-1:-1;;;;;854:11:20;832:10;:34;824:80;;;;-1:-1:-1;;;824:80:20;;1840:2:114;824:80:20;;;1822:21:114;1879:2;1859:18;;;1852:30;1918:34;1898:18;;;1891:62;-1:-1:-1;;;1969:18:114;;;1962:31;2010:19;;824:80:20;;;;;;;;1219:15:::1;1237:11:::0;::::1;;;;;;;;-1:-1:-1::0;;;;;1237:11:20::1;-1:-1:-1::0;;;;;1237:20:20::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1265:68;::::0;-1:-1:-1;;;1265:68:20;;1312:4:::1;1265:68;::::0;::::1;1304:51:114::0;1371:18;;;1364:34;;;1219:40:20;;-1:-1:-1;;;;;;1265:38:20;::::1;::::0;::::1;::::0;1277:18:114;;1265:68:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1364:11:20::1;::::0;1339:53:::1;::::0;-1:-1:-1;;;1339:53:20;;-1:-1:-1;;;;;1364:11:20;;::::1;1339:53;::::0;::::1;1304:51:114::0;1371:18;;;1364:34;;;1339:16:20;;::::1;::::0;-1:-1:-1;1339:16:20::1;::::0;-1:-1:-1;1277:18:114;;1339:53:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1398:11:20::1;::::0;:39:::1;::::0;-1:-1:-1;;;1398:39:20;;::::1;::::0;::::1;2186:25:114::0;;;-1:-1:-1;;;;;1398:11:20;;::::1;::::0;:24:::1;::::0;2159:18:114;;1398:39:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1458:13;1443:11;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;1482:31:20::1;::::0;2186:25:114;;;1482:31:20::1;::::0;2174:2:114;2159:18;1482:31:20::1;;;;;;;1213:305;1138:380:::0;:::o;14:277:114:-;81:6;134:2;122:9;113:7;109:23;105:32;102:2;;;150:1;147;140:12;102:2;182:9;176:16;235:5;228:13;221:21;214:5;211:32;201:2;;257:1;254;247:12;201:2;280:5;92:199;-1:-1:-1;;;92:199:114:o;296:291::-;390:6;443:2;431:9;422:7;418:23;414:32;411:2;;;459:1;456;449:12;411:2;491:9;485:16;510:47;551:5;510:47;:::i;592:348::-;677:6;685;738:2;726:9;717:7;713:23;709:32;706:2;;;754:1;751;744:12;706:2;793:9;780:23;812:47;853:5;812:47;:::i;:::-;878:5;930:2;915:18;;;;902:32;;-1:-1:-1;;;696:244:114:o;945:180::-;1004:6;1057:2;1045:9;1036:7;1032:23;1028:32;1025:2;;;1073:1;1070;1063:12;1025:2;-1:-1:-1;1096:23:114;;1015:110;-1:-1:-1;1015:110:114:o;2222:225::-;2262:3;2293:1;2289:6;2286:1;2283:13;2280:2;;;2338:10;2333:3;2329:20;2326:1;2319:31;2373:4;2370:1;2363:15;2401:4;2398:1;2391:15;2280:2;-1:-1:-1;2432:9:114;;2270:177::o;2452:147::-;-1:-1:-1;;;;;2543:31:114;;2533:42;;2523:2;;2589:1;2586;2579:12;2523:2;2513:86;:::o",
  "language": "Solidity",
  "natspec": {
    "kind": "dev",
    "methods": {
      "insolventEToken(address,uint256)": {
        "details": "This is called from EToken when doesn't have enought totalSupply to cover the SCR      The hook might choose not to do anything or solve the insolvency with a deposit",
        "params": {
          "eToken": "The token that suffers insolvency",
          "paymentAmount": "The amount of the payment"
        }
      },
      "outOfCash(uint256)": {
        "details": "This is called from PolicyPool when doesn't have enought money for payment.      After the call, there should be enought money in PolicyPool.currency().balanceOf(_policyPool) to      do the payment",
        "params": {
          "paymentAmount": "The amount of the payment"
        }
      }
    },
    "version": 1
  },
  "offset": [
    584,
    1655
  ],
  "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4D15EB03 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x9950DE50 EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0xC5CC79AE EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0xEE842DDA EQ PUSH2 0x9C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x375 JUMP JUMPDEST POP POP JUMP JUMPDEST STOP JUMPDEST PUSH2 0x8E PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x68 JUMP JUMPDEST PUSH2 0x83 PUSH2 0xAA CALLDATASIZE PUSH1 0x4 PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x112 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5468652063616C6C6572206D7573742062652074686520506F6C696379506F6F PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0xFA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE5A6B10F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x175 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x199 SWAP2 SWAP1 PUSH2 0x358 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 DUP5 AND SWAP3 POP PUSH4 0x95EA7B3 SWAP2 POP PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x25E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x32F JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x81CED71F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x81CED71F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2F3 SWAP2 SWAP1 PUSH2 0x3BA JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xBD74595718BCE69DFE31366C1C3C32BB9354762D4B49D8CA1EEB04007FC19F75 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x351 DUP2 PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x393 DUP2 PUSH2 0x3E0 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3DB JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xFB 0x2F ADD 0xD4 POP SAR 0xBE 0xDE GT 0xBC PUSH13 0x92DF5A08109586173EFFBF4C60 SHL 0xC6 PUSH7 0x38ACA0C2516473 PUSH16 0x6C634300080600330000000000000000 ",
  "pcMap": {
    "0": {
      "offset": [
        584,
        1655
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x80"
    },
    "2": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "4": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "MSTORE",
      "path": "20"
    },
    "5": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "CALLVALUE",
      "path": "20"
    },
    "6": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "DUP1",
      "path": "20"
    },
    "7": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "8": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x10"
    },
    "11": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "12": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "14": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "DUP1",
      "path": "20"
    },
    "15": {
      "dev": "Cannot send ether to nonpayable function",
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "REVERT",
      "path": "20"
    },
    "16": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "17": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "POP",
      "path": "20"
    },
    "18": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x4"
    },
    "20": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "CALLDATASIZE",
      "path": "20"
    },
    "21": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "LT",
      "path": "20"
    },
    "22": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x4C"
    },
    "25": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "26": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "28": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "CALLDATALOAD",
      "path": "20"
    },
    "29": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0xE0"
    },
    "31": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "SHR",
      "path": "20"
    },
    "32": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "DUP1",
      "path": "20"
    },
    "33": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0x4D15EB03"
    },
    "38": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "EQ",
      "path": "20"
    },
    "39": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x51"
    },
    "42": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "43": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "DUP1",
      "path": "20"
    },
    "44": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0x9950DE50"
    },
    "49": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "EQ",
      "path": "20"
    },
    "50": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x71"
    },
    "53": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "54": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "DUP1",
      "path": "20"
    },
    "55": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0xC5CC79AE"
    },
    "60": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "EQ",
      "path": "20"
    },
    "61": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x85"
    },
    "64": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "65": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "DUP1",
      "path": "20"
    },
    "66": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0xEE842DDA"
    },
    "71": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "EQ",
      "path": "20"
    },
    "72": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x9C"
    },
    "75": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "76": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "77": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "79": {
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "DUP1",
      "path": "20"
    },
    "80": {
      "first_revert": true,
      "fn": null,
      "offset": [
        584,
        1655
      ],
      "op": "REVERT",
      "path": "20"
    },
    "81": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "82": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1092,
        1103
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "84": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1118,
        1129
      ],
      "op": "SLOAD",
      "path": "20",
      "statement": 0
    },
    "85": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "87": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "88": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "90": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "92": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "94": {
      "op": "SHL"
    },
    "95": {
      "op": "SUB"
    },
    "96": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1118,
        1129
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "97": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1118,
        1129
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "98": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1118,
        1129
      ],
      "op": "AND",
      "path": "20"
    },
    "99": {
      "op": "DUP2"
    },
    "100": {
      "op": "MSTORE"
    },
    "101": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "103": {
      "op": "ADD"
    },
    "104": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "105": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "107": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "108": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "DUP1",
      "path": "20"
    },
    "109": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "110": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "SUB",
      "path": "20"
    },
    "111": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "112": {
      "fn": "FreeGrantInsolvencyHook.policyPool",
      "offset": [
        1040,
        1134
      ],
      "op": "RETURN",
      "path": "20"
    },
    "113": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "114": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x83"
    },
    "117": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x7F"
    },
    "120": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "CALLDATASIZE",
      "path": "20"
    },
    "121": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x4"
    },
    "123": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x375"
    },
    "126": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "jump": "i",
      "offset": [
        1569,
        1653
      ],
      "op": "JUMP",
      "path": "20"
    },
    "127": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "128": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "POP",
      "path": "20"
    },
    "129": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "POP",
      "path": "20"
    },
    "130": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "JUMP",
      "path": "20"
    },
    "131": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "132": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        1569,
        1653
      ],
      "op": "STOP",
      "path": "20"
    },
    "133": {
      "offset": [
        761,
        787
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "134": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        761,
        787
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x8E"
    },
    "137": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        761,
        787
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x1"
    },
    "139": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        761,
        787
      ],
      "op": "SLOAD",
      "path": "20"
    },
    "140": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        761,
        787
      ],
      "op": "DUP2",
      "path": "20"
    },
    "141": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        761,
        787
      ],
      "op": "JUMP",
      "path": "20"
    },
    "142": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        761,
        787
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "143": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        761,
        787
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "145": {
      "fn": "FreeGrantInsolvencyHook.insolventEToken",
      "offset": [
        761,
        787
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "146": {
      "op": "SWAP1"
    },
    "147": {
      "op": "DUP2"
    },
    "148": {
      "op": "MSTORE"
    },
    "149": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "151": {
      "op": "ADD"
    },
    "152": {
      "offset": [
        761,
        787
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x68"
    },
    "155": {
      "op": "JUMP"
    },
    "156": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1138,
        1518
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "157": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1138,
        1518
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x83"
    },
    "160": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1138,
        1518
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0xAA"
    },
    "163": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1138,
        1518
      ],
      "op": "CALLDATASIZE",
      "path": "20"
    },
    "164": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1138,
        1518
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x4"
    },
    "166": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1138,
        1518
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x3A1"
    },
    "169": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "jump": "i",
      "offset": [
        1138,
        1518
      ],
      "op": "JUMP",
      "path": "20"
    },
    "170": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1138,
        1518
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "171": {
      "offset": [
        854,
        865
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "173": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        854,
        865
      ],
      "op": "SLOAD",
      "path": "20"
    },
    "174": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "176": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "178": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "180": {
      "op": "SHL"
    },
    "181": {
      "op": "SUB"
    },
    "182": {
      "offset": [
        854,
        865
      ],
      "op": "AND",
      "path": "20"
    },
    "183": {
      "offset": [
        832,
        842
      ],
      "op": "CALLER",
      "path": "20"
    },
    "184": {
      "offset": [
        832,
        866
      ],
      "op": "EQ",
      "path": "20"
    },
    "185": {
      "offset": [
        824,
        904
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x112"
    },
    "188": {
      "offset": [
        824,
        904
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "189": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "191": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "192": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "196": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "198": {
      "op": "SHL"
    },
    "199": {
      "offset": [
        824,
        904
      ],
      "op": "DUP2",
      "path": "20"
    },
    "200": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "MSTORE",
      "path": "20"
    },
    "201": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "203": {
      "offset": [
        824,
        904
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x4"
    },
    "205": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "DUP3",
      "path": "20"
    },
    "206": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "ADD",
      "path": "20"
    },
    "207": {
      "op": "MSTORE"
    },
    "208": {
      "op": "PUSH1",
      "value": "0x21"
    },
    "210": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "212": {
      "op": "DUP3"
    },
    "213": {
      "op": "ADD"
    },
    "214": {
      "op": "MSTORE"
    },
    "215": {
      "op": "PUSH32",
      "value": "0x5468652063616C6C6572206D7573742062652074686520506F6C696379506F6F"
    },
    "248": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "250": {
      "op": "DUP3"
    },
    "251": {
      "op": "ADD"
    },
    "252": {
      "op": "MSTORE"
    },
    "253": {
      "op": "PUSH1",
      "value": "0x1B"
    },
    "255": {
      "op": "PUSH1",
      "value": "0xFA"
    },
    "257": {
      "op": "SHL"
    },
    "258": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "260": {
      "op": "DUP3"
    },
    "261": {
      "op": "ADD"
    },
    "262": {
      "op": "MSTORE"
    },
    "263": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "265": {
      "op": "ADD"
    },
    "266": {
      "offset": [
        824,
        904
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "268": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "269": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "DUP1",
      "path": "20"
    },
    "270": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "271": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "SUB",
      "path": "20"
    },
    "272": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "273": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "REVERT",
      "optimizer_revert": true,
      "path": "20"
    },
    "274": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        824,
        904
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "275": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1219,
        1234
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "277": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "DUP1",
      "path": "20"
    },
    "278": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "280": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "281": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "SLOAD",
      "path": "20"
    },
    "282": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "283": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x100"
    },
    "286": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "EXP",
      "path": "20"
    },
    "287": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "288": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "DIV",
      "path": "20"
    },
    "289": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "291": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "293": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "295": {
      "op": "SHL"
    },
    "296": {
      "op": "SUB"
    },
    "297": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1248
      ],
      "op": "AND",
      "path": "20"
    },
    "298": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "300": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "302": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "304": {
      "op": "SHL"
    },
    "305": {
      "op": "SUB"
    },
    "306": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1257
      ],
      "op": "AND",
      "path": "20"
    },
    "307": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1257
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0xE5A6B10F"
    },
    "312": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "314": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "315": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP2",
      "path": "20"
    },
    "316": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0xFFFFFFFF"
    },
    "321": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "AND",
      "path": "20"
    },
    "322": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0xE0"
    },
    "324": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "SHL",
      "path": "20"
    },
    "325": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP2",
      "path": "20"
    },
    "326": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "MSTORE",
      "path": "20"
    },
    "327": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x4"
    },
    "329": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "ADD",
      "path": "20"
    },
    "330": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x20"
    },
    "332": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "334": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "335": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP1",
      "path": "20"
    },
    "336": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP4",
      "path": "20"
    },
    "337": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "SUB",
      "path": "20"
    },
    "338": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP2",
      "path": "20"
    },
    "339": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP7",
      "path": "20"
    },
    "340": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP1",
      "path": "20"
    },
    "341": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "EXTCODESIZE",
      "path": "20"
    },
    "342": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "343": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP1",
      "path": "20"
    },
    "344": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "345": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x161"
    },
    "348": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "349": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "351": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP1",
      "path": "20"
    },
    "352": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "REVERT",
      "path": "20"
    },
    "353": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "354": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "POP",
      "path": "20"
    },
    "355": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "GAS",
      "path": "20"
    },
    "356": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "STATICCALL",
      "path": "20"
    },
    "357": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "358": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP1",
      "path": "20"
    },
    "359": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "360": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x175"
    },
    "363": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "364": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "365": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "367": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP1",
      "path": "20"
    },
    "368": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "RETURNDATACOPY",
      "path": "20"
    },
    "369": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "370": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "372": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "REVERT",
      "path": "20"
    },
    "373": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "374": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "POP",
      "path": "20"
    },
    "375": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "POP",
      "path": "20"
    },
    "376": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "POP",
      "path": "20"
    },
    "377": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "POP",
      "path": "20"
    },
    "378": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "380": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "381": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "382": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x1F"
    },
    "384": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "NOT",
      "path": "20"
    },
    "385": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x1F"
    },
    "387": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP3",
      "path": "20"
    },
    "388": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "ADD",
      "path": "20"
    },
    "389": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "AND",
      "path": "20"
    },
    "390": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP3",
      "path": "20"
    },
    "391": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "ADD",
      "path": "20"
    },
    "392": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP1",
      "path": "20"
    },
    "393": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "395": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "MSTORE",
      "path": "20"
    },
    "396": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "POP",
      "path": "20"
    },
    "397": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "DUP2",
      "path": "20"
    },
    "398": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "ADD",
      "path": "20"
    },
    "399": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "400": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x199"
    },
    "403": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "404": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "405": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x358"
    },
    "408": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "jump": "i",
      "offset": [
        1237,
        1259
      ],
      "op": "JUMP",
      "path": "20"
    },
    "409": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1237,
        1259
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "410": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH1",
      "path": "20",
      "statement": 1,
      "value": "0x40"
    },
    "412": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "413": {
      "op": "PUSH4",
      "value": "0x40C10F19"
    },
    "418": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "420": {
      "op": "SHL"
    },
    "421": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP2",
      "path": "20"
    },
    "422": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "MSTORE",
      "path": "20"
    },
    "423": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1312,
        1316
      ],
      "op": "ADDRESS",
      "path": "20"
    },
    "424": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x4"
    },
    "426": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP3",
      "path": "20"
    },
    "427": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "ADD",
      "path": "20"
    },
    "428": {
      "op": "MSTORE"
    },
    "429": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "431": {
      "op": "DUP2"
    },
    "432": {
      "op": "ADD"
    },
    "433": {
      "op": "DUP5"
    },
    "434": {
      "op": "SWAP1"
    },
    "435": {
      "op": "MSTORE"
    },
    "436": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1219,
        1259
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "437": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1219,
        1259
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "438": {
      "op": "POP"
    },
    "439": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "441": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "443": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "445": {
      "op": "SHL"
    },
    "446": {
      "op": "SUB"
    },
    "447": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1303
      ],
      "op": "DUP3",
      "path": "20"
    },
    "448": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1303
      ],
      "op": "AND",
      "path": "20"
    },
    "449": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1303
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "450": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1303
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0x40C10F19"
    },
    "455": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1303
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "456": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "458": {
      "op": "ADD"
    },
    "459": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "461": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "463": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "464": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP1",
      "path": "20"
    },
    "465": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP4",
      "path": "20"
    },
    "466": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "SUB",
      "path": "20"
    },
    "467": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP2",
      "path": "20"
    },
    "468": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "470": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP8",
      "path": "20"
    },
    "471": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP1",
      "path": "20"
    },
    "472": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "EXTCODESIZE",
      "path": "20"
    },
    "473": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "474": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP1",
      "path": "20"
    },
    "475": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "476": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x1E4"
    },
    "479": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "480": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "482": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP1",
      "path": "20"
    },
    "483": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "REVERT",
      "path": "20"
    },
    "484": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "485": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "POP",
      "path": "20"
    },
    "486": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "GAS",
      "path": "20"
    },
    "487": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "CALL",
      "path": "20"
    },
    "488": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "489": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP1",
      "path": "20"
    },
    "490": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "491": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x1F8"
    },
    "494": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "495": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "496": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "498": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "DUP1",
      "path": "20"
    },
    "499": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "RETURNDATACOPY",
      "path": "20"
    },
    "500": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "501": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "503": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "REVERT",
      "path": "20"
    },
    "504": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1265,
        1333
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "505": {
      "op": "POP"
    },
    "506": {
      "op": "POP"
    },
    "507": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1364,
        1375
      ],
      "op": "PUSH1",
      "path": "20",
      "statement": 2,
      "value": "0x0"
    },
    "509": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1364,
        1375
      ],
      "op": "SLOAD",
      "path": "20"
    },
    "510": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "512": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "513": {
      "op": "PUSH4",
      "value": "0x95EA7B3"
    },
    "518": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "520": {
      "op": "SHL"
    },
    "521": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP2",
      "path": "20"
    },
    "522": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "MSTORE",
      "path": "20"
    },
    "523": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "525": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "527": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "529": {
      "op": "SHL"
    },
    "530": {
      "op": "SUB"
    },
    "531": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1364,
        1375
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "532": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1364,
        1375
      ],
      "op": "DUP3",
      "path": "20"
    },
    "533": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1364,
        1375
      ],
      "op": "AND",
      "path": "20"
    },
    "534": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x4"
    },
    "536": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP3",
      "path": "20"
    },
    "537": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "ADD",
      "path": "20"
    },
    "538": {
      "op": "MSTORE"
    },
    "539": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "541": {
      "op": "DUP2"
    },
    "542": {
      "op": "ADD"
    },
    "543": {
      "op": "DUP7"
    },
    "544": {
      "op": "SWAP1"
    },
    "545": {
      "op": "MSTORE"
    },
    "546": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1355
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "547": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1355
      ],
      "op": "DUP5",
      "path": "20"
    },
    "548": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1355
      ],
      "op": "AND",
      "path": "20"
    },
    "549": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1355
      ],
      "op": "SWAP3",
      "path": "20"
    },
    "550": {
      "op": "POP"
    },
    "551": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1355
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0x95EA7B3"
    },
    "556": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1355
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "557": {
      "op": "POP"
    },
    "558": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "560": {
      "op": "ADD"
    },
    "561": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x20"
    },
    "563": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "565": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "566": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP1",
      "path": "20"
    },
    "567": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP4",
      "path": "20"
    },
    "568": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "SUB",
      "path": "20"
    },
    "569": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP2",
      "path": "20"
    },
    "570": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "572": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP8",
      "path": "20"
    },
    "573": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP1",
      "path": "20"
    },
    "574": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "EXTCODESIZE",
      "path": "20"
    },
    "575": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "576": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP1",
      "path": "20"
    },
    "577": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "578": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x24A"
    },
    "581": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "582": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "584": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP1",
      "path": "20"
    },
    "585": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "REVERT",
      "path": "20"
    },
    "586": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "587": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "POP",
      "path": "20"
    },
    "588": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "GAS",
      "path": "20"
    },
    "589": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "CALL",
      "path": "20"
    },
    "590": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "591": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP1",
      "path": "20"
    },
    "592": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "593": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x25E"
    },
    "596": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "597": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "598": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "600": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP1",
      "path": "20"
    },
    "601": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "RETURNDATACOPY",
      "path": "20"
    },
    "602": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "603": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "605": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "REVERT",
      "path": "20"
    },
    "606": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "607": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "POP",
      "path": "20"
    },
    "608": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "POP",
      "path": "20"
    },
    "609": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "POP",
      "path": "20"
    },
    "610": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "POP",
      "path": "20"
    },
    "611": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "613": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "614": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "615": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x1F"
    },
    "617": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "NOT",
      "path": "20"
    },
    "618": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x1F"
    },
    "620": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP3",
      "path": "20"
    },
    "621": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "ADD",
      "path": "20"
    },
    "622": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "AND",
      "path": "20"
    },
    "623": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP3",
      "path": "20"
    },
    "624": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "ADD",
      "path": "20"
    },
    "625": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP1",
      "path": "20"
    },
    "626": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "628": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "MSTORE",
      "path": "20"
    },
    "629": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "POP",
      "path": "20"
    },
    "630": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "DUP2",
      "path": "20"
    },
    "631": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "ADD",
      "path": "20"
    },
    "632": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "633": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x282"
    },
    "636": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "637": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "638": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x32F"
    },
    "641": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "jump": "i",
      "offset": [
        1339,
        1392
      ],
      "op": "JUMP",
      "path": "20"
    },
    "642": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1339,
        1392
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "643": {
      "op": "POP"
    },
    "644": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1409
      ],
      "op": "PUSH1",
      "path": "20",
      "statement": 3,
      "value": "0x0"
    },
    "646": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1409
      ],
      "op": "SLOAD",
      "path": "20"
    },
    "647": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "649": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "650": {
      "op": "PUSH4",
      "value": "0x81CED71F"
    },
    "655": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "657": {
      "op": "SHL"
    },
    "658": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP2",
      "path": "20"
    },
    "659": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "MSTORE",
      "path": "20"
    },
    "660": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x4"
    },
    "662": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP2",
      "path": "20"
    },
    "663": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "ADD",
      "path": "20"
    },
    "664": {
      "op": "DUP5"
    },
    "665": {
      "op": "SWAP1"
    },
    "666": {
      "op": "MSTORE"
    },
    "667": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "669": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "671": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "673": {
      "op": "SHL"
    },
    "674": {
      "op": "SUB"
    },
    "675": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1409
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "676": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1409
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "677": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1409
      ],
      "op": "AND",
      "path": "20"
    },
    "678": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1409
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "679": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1422
      ],
      "op": "PUSH4",
      "path": "20",
      "value": "0x81CED71F"
    },
    "684": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1422
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "685": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "687": {
      "op": "ADD"
    },
    "688": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "690": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "692": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "693": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP1",
      "path": "20"
    },
    "694": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP4",
      "path": "20"
    },
    "695": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "SUB",
      "path": "20"
    },
    "696": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP2",
      "path": "20"
    },
    "697": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "699": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP8",
      "path": "20"
    },
    "700": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP1",
      "path": "20"
    },
    "701": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "EXTCODESIZE",
      "path": "20"
    },
    "702": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "703": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP1",
      "path": "20"
    },
    "704": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "705": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x2C9"
    },
    "708": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "709": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "711": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP1",
      "path": "20"
    },
    "712": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "REVERT",
      "path": "20"
    },
    "713": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "714": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "POP",
      "path": "20"
    },
    "715": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "GAS",
      "path": "20"
    },
    "716": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "CALL",
      "path": "20"
    },
    "717": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "718": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP1",
      "path": "20"
    },
    "719": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "ISZERO",
      "path": "20"
    },
    "720": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x2DD"
    },
    "723": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "JUMPI",
      "path": "20"
    },
    "724": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "725": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "727": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "DUP1",
      "path": "20"
    },
    "728": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "RETURNDATACOPY",
      "path": "20"
    },
    "729": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "RETURNDATASIZE",
      "path": "20"
    },
    "730": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "732": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "REVERT",
      "path": "20"
    },
    "733": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "734": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "POP",
      "path": "20"
    },
    "735": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "POP",
      "path": "20"
    },
    "736": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "POP",
      "path": "20"
    },
    "737": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1398,
        1437
      ],
      "op": "POP",
      "path": "20"
    },
    "738": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1458,
        1471
      ],
      "op": "DUP2",
      "path": "20",
      "statement": 4
    },
    "739": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1454
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x1"
    },
    "741": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1454
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x0"
    },
    "743": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "DUP3",
      "path": "20"
    },
    "744": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "DUP3",
      "path": "20"
    },
    "745": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "SLOAD",
      "path": "20"
    },
    "746": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x2F3"
    },
    "749": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "750": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "751": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "PUSH2",
      "path": "20",
      "value": "0x3BA"
    },
    "754": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "jump": "i",
      "offset": [
        1443,
        1471
      ],
      "op": "JUMP",
      "path": "20"
    },
    "755": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "JUMPDEST",
      "path": "20"
    },
    "756": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "757": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "758": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1443,
        1471
      ],
      "op": "SSTORE",
      "path": "20"
    },
    "759": {
      "op": "POP"
    },
    "760": {
      "op": "POP"
    },
    "761": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "PUSH1",
      "path": "20",
      "statement": 5,
      "value": "0x40"
    },
    "763": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "764": {
      "op": "DUP3"
    },
    "765": {
      "op": "DUP2"
    },
    "766": {
      "op": "MSTORE"
    },
    "767": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "PUSH32",
      "path": "20",
      "value": "0xBD74595718BCE69DFE31366C1C3C32BB9354762D4B49D8CA1EEB04007FC19F75"
    },
    "800": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "801": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "803": {
      "op": "ADD"
    },
    "804": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "PUSH1",
      "path": "20",
      "value": "0x40"
    },
    "806": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "MLOAD",
      "path": "20"
    },
    "807": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "DUP1",
      "path": "20"
    },
    "808": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "SWAP2",
      "path": "20"
    },
    "809": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "SUB",
      "path": "20"
    },
    "810": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "SWAP1",
      "path": "20"
    },
    "811": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1482,
        1513
      ],
      "op": "LOG1",
      "path": "20"
    },
    "812": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1213,
        1518
      ],
      "op": "POP",
      "path": "20"
    },
    "813": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "offset": [
        1138,
        1518
      ],
      "op": "POP",
      "path": "20"
    },
    "814": {
      "fn": "FreeGrantInsolvencyHook.outOfCash",
      "jump": "o",
      "offset": [
        1138,
        1518
      ],
      "op": "JUMP",
      "path": "20"
    },
    "815": {
      "op": "JUMPDEST"
    },
    "816": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "818": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "820": {
      "op": "DUP3"
    },
    "821": {
      "op": "DUP5"
    },
    "822": {
      "op": "SUB"
    },
    "823": {
      "op": "SLT"
    },
    "824": {
      "op": "ISZERO"
    },
    "825": {
      "op": "PUSH2",
      "value": "0x341"
    },
    "828": {
      "op": "JUMPI"
    },
    "829": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "831": {
      "op": "DUP1"
    },
    "832": {
      "op": "REVERT"
    },
    "833": {
      "op": "JUMPDEST"
    },
    "834": {
      "op": "DUP2"
    },
    "835": {
      "op": "MLOAD"
    },
    "836": {
      "op": "DUP1"
    },
    "837": {
      "op": "ISZERO"
    },
    "838": {
      "op": "ISZERO"
    },
    "839": {
      "op": "DUP2"
    },
    "840": {
      "op": "EQ"
    },
    "841": {
      "op": "PUSH2",
      "value": "0x351"
    },
    "844": {
      "op": "JUMPI"
    },
    "845": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "847": {
      "op": "DUP1"
    },
    "848": {
      "op": "REVERT"
    },
    "849": {
      "op": "JUMPDEST"
    },
    "850": {
      "op": "SWAP4"
    },
    "851": {
      "op": "SWAP3"
    },
    "852": {
      "op": "POP"
    },
    "853": {
      "op": "POP"
    },
    "854": {
      "op": "POP"
    },
    "855": {
      "jump": "o",
      "op": "JUMP"
    },
    "856": {
      "op": "JUMPDEST"
    },
    "857": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "859": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "861": {
      "op": "DUP3"
    },
    "862": {
      "op": "DUP5"
    },
    "863": {
      "op": "SUB"
    },
    "864": {
      "op": "SLT"
    },
    "865": {
      "op": "ISZERO"
    },
    "866": {
      "op": "PUSH2",
      "value": "0x36A"
    },
    "869": {
      "op": "JUMPI"
    },
    "870": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "872": {
      "op": "DUP1"
    },
    "873": {
      "op": "REVERT"
    },
    "874": {
      "op": "JUMPDEST"
    },
    "875": {
      "op": "DUP2"
    },
    "876": {
      "op": "MLOAD"
    },
    "877": {
      "op": "PUSH2",
      "value": "0x351"
    },
    "880": {
      "op": "DUP2"
    },
    "881": {
      "op": "PUSH2",
      "value": "0x3E0"
    },
    "884": {
      "jump": "i",
      "op": "JUMP"
    },
    "885": {
      "op": "JUMPDEST"
    },
    "886": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "888": {
      "op": "DUP1"
    },
    "889": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "891": {
      "op": "DUP4"
    },
    "892": {
      "op": "DUP6"
    },
    "893": {
      "op": "SUB"
    },
    "894": {
      "op": "SLT"
    },
    "895": {
      "op": "ISZERO"
    },
    "896": {
      "op": "PUSH2",
      "value": "0x388"
    },
    "899": {
      "op": "JUMPI"
    },
    "900": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "902": {
      "op": "DUP1"
    },
    "903": {
      "op": "REVERT"
    },
    "904": {
      "op": "JUMPDEST"
    },
    "905": {
      "op": "DUP3"
    },
    "906": {
      "op": "CALLDATALOAD"
    },
    "907": {
      "op": "PUSH2",
      "value": "0x393"
    },
    "910": {
      "op": "DUP2"
    },
    "911": {
      "op": "PUSH2",
      "value": "0x3E0"
    },
    "914": {
      "jump": "i",
      "op": "JUMP"
    },
    "915": {
      "op": "JUMPDEST"
    },
    "916": {
      "op": "SWAP5"
    },
    "917": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "919": {
      "op": "SWAP4"
    },
    "920": {
      "op": "SWAP1"
    },
    "921": {
      "op": "SWAP4"
    },
    "922": {
      "op": "ADD"
    },
    "923": {
      "op": "CALLDATALOAD"
    },
    "924": {
      "op": "SWAP4"
    },
    "925": {
      "op": "POP"
    },
    "926": {
      "op": "POP"
    },
    "927": {
      "op": "POP"
    },
    "928": {
      "jump": "o",
      "op": "JUMP"
    },
    "929": {
      "op": "JUMPDEST"
    },
    "930": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "932": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "934": {
      "op": "DUP3"
    },
    "935": {
      "op": "DUP5"
    },
    "936": {
      "op": "SUB"
    },
    "937": {
      "op": "SLT"
    },
    "938": {
      "op": "ISZERO"
    },
    "939": {
      "op": "PUSH2",
      "value": "0x3B3"
    },
    "942": {
      "op": "JUMPI"
    },
    "943": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "945": {
      "op": "DUP1"
    },
    "946": {
      "op": "REVERT"
    },
    "947": {
      "op": "JUMPDEST"
    },
    "948": {
      "op": "POP"
    },
    "949": {
      "op": "CALLDATALOAD"
    },
    "950": {
      "op": "SWAP2"
    },
    "951": {
      "op": "SWAP1"
    },
    "952": {
      "op": "POP"
    },
    "953": {
      "jump": "o",
      "op": "JUMP"
    },
    "954": {
      "op": "JUMPDEST"
    },
    "955": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "957": {
      "op": "DUP3"
    },
    "958": {
      "op": "NOT"
    },
    "959": {
      "op": "DUP3"
    },
    "960": {
      "op": "GT"
    },
    "961": {
      "op": "ISZERO"
    },
    "962": {
      "op": "PUSH2",
      "value": "0x3DB"
    },
    "965": {
      "op": "JUMPI"
    },
    "966": {
      "op": "PUSH4",
      "value": "0x4E487B71"
    },
    "971": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "973": {
      "op": "SHL"
    },
    "974": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "976": {
      "op": "MSTORE"
    },
    "977": {
      "op": "PUSH1",
      "value": "0x11"
    },
    "979": {
      "op": "PUSH1",
      "value": "0x4"
    },
    "981": {
      "op": "MSTORE"
    },
    "982": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "984": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "986": {
      "op": "REVERT"
    },
    "987": {
      "op": "JUMPDEST"
    },
    "988": {
      "op": "POP"
    },
    "989": {
      "op": "ADD"
    },
    "990": {
      "op": "SWAP1"
    },
    "991": {
      "jump": "o",
      "op": "JUMP"
    },
    "992": {
      "op": "JUMPDEST"
    },
    "993": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "995": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "997": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "999": {
      "op": "SHL"
    },
    "1000": {
      "op": "SUB"
    },
    "1001": {
      "op": "DUP2"
    },
    "1002": {
      "op": "AND"
    },
    "1003": {
      "op": "DUP2"
    },
    "1004": {
      "op": "EQ"
    },
    "1005": {
      "op": "PUSH2",
      "value": "0x3F5"
    },
    "1008": {
      "op": "JUMPI"
    },
    "1009": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1011": {
      "op": "DUP1"
    },
    "1012": {
      "op": "REVERT"
    },
    "1013": {
      "op": "JUMPDEST"
    },
    "1014": {
      "op": "POP"
    },
    "1015": {
      "jump": "o",
      "op": "JUMP"
    }
  },
  "sha1": "762933f688692c879c704bfebd5f17568f22f0cb",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {IPolicyPool} from \"../../interfaces/IPolicyPool.sol\";\nimport {IPolicyPoolComponent} from \"../../interfaces/IPolicyPoolComponent.sol\";\nimport {IInsolvencyHook} from \"../../interfaces/IInsolvencyHook.sol\";\nimport {IEToken} from \"../../interfaces/IEToken.sol\";\nimport {WadRayMath} from \"../WadRayMath.sol\";\nimport {IMintableERC20} from \"./IMintableERC20.sol\";\n\ncontract FreeGrantInsolvencyHook is IInsolvencyHook, IPolicyPoolComponent {\n  using SafeERC20 for IERC20;\n  using WadRayMath for uint256;\n\n  IPolicyPool internal _policyPool;\n  uint256 public cashGranted;\n\n  modifier onlyPolicyPool() {\n    require(msg.sender == address(_policyPool), \"The caller must be the PolicyPool\");\n    _;\n  }\n\n  event OutOfCashGranted(uint256 amount);\n\n  constructor(IPolicyPool policyPool_) {\n    _policyPool = policyPool_;\n  }\n\n  function policyPool() public view override returns (IPolicyPool) {\n    return _policyPool;\n  }\n\n  function outOfCash(uint256 paymentAmount) external override onlyPolicyPool {\n    IERC20 currency = _policyPool.currency();\n    IMintableERC20(address(currency)).mint(address(this), paymentAmount);\n    currency.approve(address(_policyPool), paymentAmount);\n    _policyPool.receiveGrant(paymentAmount);\n    cashGranted += paymentAmount;\n    emit OutOfCashGranted(paymentAmount);\n  }\n\n  // solhint-disable-next-line no-empty-blocks\n  function insolventEToken(IEToken eToken, uint256 paymentAmount) external override {}\n}\n",
  "sourceMap": "584:1071:20:-:0;;;963:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1006:11;:25;;-1:-1:-1;;;;;;1006:25:20;-1:-1:-1;;;;;1006:25:20;;;;;;;;;;584:1071;;14:311:114;105:6;158:2;146:9;137:7;133:23;129:32;126:2;;;174:1;171;164:12;126:2;200:16;;-1:-1:-1;;;;;245:31:114;;235:42;;225:2;;291:1;288;281:12;225:2;314:5;116:209;-1:-1:-1;;;116:209:114:o;:::-;584:1071:20;;;;;;",
  "sourcePath": "contracts/mocks/FreeGrantInsolvencyHook.sol",
  "type": "contract"
}