{
    "version": "2.2.2",
    "name": "kamino_vault",
    "instructions": [
        {
            "name": "initVault",
            "accounts": [
                {
                    "name": "adminAuthority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseTokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "adminTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesTokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "updateReserveAllocation",
            "accounts": [
                {
                    "name": "signer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserve",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "ctokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserveWhitelistEntry",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                },
                {
                    "name": "reserveCollateralTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "weight",
                    "type": "u64"
                },
                {
                    "name": "cap",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "updateReserveAllocationV2",
            "accounts": [
                {
                    "name": "signer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserve",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "ctokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserveWhitelistEntry",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                },
                {
                    "name": "reserveCollateralTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "weight",
                    "type": "u64"
                },
                {
                    "name": "cap",
                    "type": "u64"
                },
                {
                    "name": "ctokenAllocationCap",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "deposit",
            "accounts": [
                {
                    "name": "user",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userTokenAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userSharesAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "eventAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "program",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "maxAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "depositWithMinSharesOut",
            "accounts": [
                {
                    "name": "user",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userTokenAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userSharesAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "eventAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "program",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "maxAmount",
                    "type": "u64"
                },
                {
                    "name": "minSharesOut",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "buy",
            "accounts": [
                {
                    "name": "user",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userTokenAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userSharesAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "eventAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "program",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "maxAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "buyWithMinSharesOut",
            "accounts": [
                {
                    "name": "user",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userTokenAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userSharesAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "eventAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "program",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "maxAmount",
                    "type": "u64"
                },
                {
                    "name": "minSharesOut",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "withdraw",
            "accounts": [
                {
                    "name": "withdrawFromAvailable",
                    "accounts": [
                        {
                            "name": "user",
                            "isMut": false,
                            "isSigner": true
                        },
                        {
                            "name": "vaultState",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "globalConfig",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "tokenVault",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "baseVaultAuthority",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "userTokenAta",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "tokenMint",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "userSharesAta",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "sharesMint",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "tokenProgram",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "sharesTokenProgram",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "klendProgram",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "eventAuthority",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "program",
                            "isMut": false,
                            "isSigner": false
                        }
                    ]
                },
                {
                    "name": "withdrawFromReserveAccounts",
                    "accounts": [
                        {
                            "name": "vaultState",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "reserve",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "ctokenVault",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "lendingMarket",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "lendingMarketAuthority",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "reserveLiquiditySupply",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "reserveCollateralMint",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "reserveCollateralTokenProgram",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "instructionSysvarAccount",
                            "isMut": false,
                            "isSigner": false
                        }
                    ]
                },
                {
                    "name": "eventAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "program",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "sharesAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "sell",
            "accounts": [
                {
                    "name": "withdrawFromAvailable",
                    "accounts": [
                        {
                            "name": "user",
                            "isMut": false,
                            "isSigner": true
                        },
                        {
                            "name": "vaultState",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "globalConfig",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "tokenVault",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "baseVaultAuthority",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "userTokenAta",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "tokenMint",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "userSharesAta",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "sharesMint",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "tokenProgram",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "sharesTokenProgram",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "klendProgram",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "eventAuthority",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "program",
                            "isMut": false,
                            "isSigner": false
                        }
                    ]
                },
                {
                    "name": "withdrawFromReserveAccounts",
                    "accounts": [
                        {
                            "name": "vaultState",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "reserve",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "ctokenVault",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "lendingMarket",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "lendingMarketAuthority",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "reserveLiquiditySupply",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "reserveCollateralMint",
                            "isMut": true,
                            "isSigner": false
                        },
                        {
                            "name": "reserveCollateralTokenProgram",
                            "isMut": false,
                            "isSigner": false
                        },
                        {
                            "name": "instructionSysvarAccount",
                            "isMut": false,
                            "isSigner": false
                        }
                    ]
                },
                {
                    "name": "eventAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "program",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "sharesAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "invest",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "payerTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ctokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserve",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "lendingMarket",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "lendingMarketAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveLiquiditySupply",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserveWhitelistEntry",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "instructionSysvarAccount",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "investWithMaxAmount",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "payerTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ctokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserve",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "lendingMarket",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "lendingMarketAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveLiquiditySupply",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserveWhitelistEntry",
                    "isMut": false,
                    "isSigner": false,
                    "isOptional": true
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "instructionSysvarAccount",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "maxAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "updateVaultConfig",
            "accounts": [
                {
                    "name": "signer",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "entry",
                    "type": {
                        "defined": "VaultConfigField"
                    }
                },
                {
                    "name": "data",
                    "type": "bytes"
                }
            ]
        },
        {
            "name": "withdrawPendingFees",
            "accounts": [
                {
                    "name": "vaultAdminAuthority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserve",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ctokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "lendingMarket",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "lendingMarketAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveLiquiditySupply",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "instructionSysvarAccount",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "updateAdmin",
            "accounts": [
                {
                    "name": "pendingAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "giveUpPendingFees",
            "accounts": [
                {
                    "name": "vaultAdminAuthority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "maxAmountToGiveUp",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "initializeSharesMetadata",
            "accounts": [
                {
                    "name": "vaultAdminAuthority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesMetadata",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "metadataProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "name",
                    "type": "string"
                },
                {
                    "name": "symbol",
                    "type": "string"
                },
                {
                    "name": "uri",
                    "type": "string"
                }
            ]
        },
        {
            "name": "updateSharesMetadata",
            "accounts": [
                {
                    "name": "vaultAdminAuthority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesMetadata",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "metadataProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "name",
                    "type": "string"
                },
                {
                    "name": "symbol",
                    "type": "string"
                },
                {
                    "name": "uri",
                    "type": "string"
                }
            ]
        },
        {
            "name": "withdrawFromAvailable",
            "accounts": [
                {
                    "name": "user",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "userTokenAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userSharesAta",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "sharesMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "eventAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "program",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "sharesAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "removeAllocation",
            "accounts": [
                {
                    "name": "vaultAdminAuthority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserve",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "initGlobalConfig",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "programData",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "updateGlobalConfig",
            "accounts": [
                {
                    "name": "globalAdmin",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "update",
                    "type": {
                        "defined": "UpdateGlobalConfigMode"
                    }
                }
            ]
        },
        {
            "name": "updateGlobalConfigAdmin",
            "accounts": [
                {
                    "name": "pendingAdmin",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "addUpdateWhitelistedReserve",
            "accounts": [
                {
                    "name": "globalAdmin",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserve",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserveWhitelistEntry",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "update",
                    "type": {
                        "defined": "UpdateReserveWhitelistMode"
                    }
                }
            ]
        },
        {
            "name": "topupRewards",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "payerTokenTa",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "withdrawRewards",
            "accounts": [
                {
                    "name": "vaultAdminAuthority",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "withdrawTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "amount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "redeemInKind",
            "accounts": [
                {
                    "name": "user",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "vaultState",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "globalConfig",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "baseVaultAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "reserve",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ctokenVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userCtokenTa",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ctokenMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userSharesTa",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "sharesMint",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reserveCollateralTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "sharesTokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "klendProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "eventAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "program",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "sharesAmount",
                    "type": "u64"
                }
            ]
        }
    ],
    "accounts": [
        {
            "name": "Reserve",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "version",
                        "type": "u64"
                    },
                    {
                        "name": "lastUpdate",
                        "type": {
                            "defined": "LastUpdate"
                        }
                    },
                    {
                        "name": "lendingMarket",
                        "type": "publicKey"
                    },
                    {
                        "name": "farmCollateral",
                        "type": "publicKey"
                    },
                    {
                        "name": "farmDebt",
                        "type": "publicKey"
                    },
                    {
                        "name": "liquidity",
                        "type": {
                            "defined": "ReserveLiquidity"
                        }
                    },
                    {
                        "name": "reserveLiquidityPadding",
                        "type": {
                            "array": [
                                "u64",
                                150
                            ]
                        }
                    },
                    {
                        "name": "collateral",
                        "type": {
                            "defined": "ReserveCollateral"
                        }
                    },
                    {
                        "name": "reserveCollateralPadding",
                        "type": {
                            "array": [
                                "u64",
                                150
                            ]
                        }
                    },
                    {
                        "name": "config",
                        "type": {
                            "defined": "ReserveConfig"
                        }
                    },
                    {
                        "name": "configPadding",
                        "type": {
                            "array": [
                                "u64",
                                112
                            ]
                        }
                    },
                    {
                        "name": "borrowedAmountOutsideElevationGroup",
                        "type": "u64"
                    },
                    {
                        "name": "borrowedAmountsAgainstThisReserveInElevationGroups",
                        "type": {
                            "array": [
                                "u64",
                                32
                            ]
                        }
                    },
                    {
                        "name": "withdrawQueue",
                        "type": {
                            "defined": "WithdrawQueue"
                        }
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u64",
                                204
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "GlobalConfig",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "globalAdmin",
                        "type": "publicKey"
                    },
                    {
                        "name": "pendingAdmin",
                        "type": "publicKey"
                    },
                    {
                        "name": "withdrawalPenaltyLamports",
                        "type": "u64"
                    },
                    {
                        "name": "withdrawalPenaltyBps",
                        "type": "u64"
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u8",
                                944
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "ReserveWhitelistEntry",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "tokenMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "reserve",
                        "type": "publicKey"
                    },
                    {
                        "name": "whitelistAddAllocation",
                        "type": "u8"
                    },
                    {
                        "name": "whitelistInvest",
                        "type": "u8"
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u8",
                                62
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "VaultState",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "vaultAdminAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "baseVaultAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "baseVaultAuthorityBump",
                        "type": "u64"
                    },
                    {
                        "name": "tokenMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "tokenMintDecimals",
                        "type": "u64"
                    },
                    {
                        "name": "tokenVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "tokenProgram",
                        "type": "publicKey"
                    },
                    {
                        "name": "sharesMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "sharesMintDecimals",
                        "type": "u64"
                    },
                    {
                        "name": "tokenAvailable",
                        "type": "u64"
                    },
                    {
                        "name": "sharesIssued",
                        "type": "u64"
                    },
                    {
                        "name": "availableCrankFunds",
                        "type": "u64"
                    },
                    {
                        "name": "unallocatedWeight",
                        "type": "u64"
                    },
                    {
                        "name": "performanceFeeBps",
                        "type": "u64"
                    },
                    {
                        "name": "managementFeeBps",
                        "type": "u64"
                    },
                    {
                        "name": "lastFeeChargeTimestamp",
                        "type": "u64"
                    },
                    {
                        "name": "prevAumSf",
                        "type": "u128"
                    },
                    {
                        "name": "pendingFeesSf",
                        "type": "u128"
                    },
                    {
                        "name": "vaultAllocationStrategy",
                        "type": {
                            "array": [
                                {
                                    "defined": "VaultAllocation"
                                },
                                25
                            ]
                        }
                    },
                    {
                        "name": "padding1",
                        "type": {
                            "array": [
                                "u128",
                                256
                            ]
                        }
                    },
                    {
                        "name": "minDepositAmount",
                        "type": "u64"
                    },
                    {
                        "name": "minWithdrawAmount",
                        "type": "u64"
                    },
                    {
                        "name": "minInvestAmount",
                        "type": "u64"
                    },
                    {
                        "name": "minInvestDelaySlots",
                        "type": "u64"
                    },
                    {
                        "name": "crankFundFeePerReserve",
                        "type": "u64"
                    },
                    {
                        "name": "pendingAdmin",
                        "type": "publicKey"
                    },
                    {
                        "name": "cumulativeEarnedInterestSf",
                        "type": "u128"
                    },
                    {
                        "name": "cumulativeMgmtFeesSf",
                        "type": "u128"
                    },
                    {
                        "name": "cumulativePerfFeesSf",
                        "type": "u128"
                    },
                    {
                        "name": "name",
                        "type": {
                            "array": [
                                "u8",
                                40
                            ]
                        }
                    },
                    {
                        "name": "vaultLookupTable",
                        "type": "publicKey"
                    },
                    {
                        "name": "vaultFarm",
                        "type": "publicKey"
                    },
                    {
                        "name": "creationTimestamp",
                        "type": "u64"
                    },
                    {
                        "name": "unallocatedTokensCap",
                        "type": "u64"
                    },
                    {
                        "name": "allocationAdmin",
                        "type": "publicKey"
                    },
                    {
                        "name": "withdrawalPenaltyLamports",
                        "type": "u64"
                    },
                    {
                        "name": "withdrawalPenaltyBps",
                        "type": "u64"
                    },
                    {
                        "name": "firstLossCapitalFarm",
                        "type": "publicKey"
                    },
                    {
                        "name": "allowAllocationsInWhitelistedReservesOnly",
                        "type": "u8"
                    },
                    {
                        "name": "allowInvestInWhitelistedReservesOnly",
                        "type": "u8"
                    },
                    {
                        "name": "padding2",
                        "type": {
                            "array": [
                                "u8",
                                6
                            ]
                        }
                    },
                    {
                        "name": "depositCap",
                        "type": "u64"
                    },
                    {
                        "name": "rewardInfo",
                        "type": {
                            "defined": "VaultRewardInfo"
                        }
                    },
                    {
                        "name": "padding3",
                        "type": {
                            "array": [
                                "u128",
                                232
                            ]
                        }
                    }
                ]
            }
        }
    ],
    "types": [
        {
            "name": "LastUpdate",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "slot",
                        "type": "u64"
                    },
                    {
                        "name": "stale",
                        "type": "u8"
                    },
                    {
                        "name": "priceStatus",
                        "type": "u8"
                    },
                    {
                        "name": "placeholder",
                        "type": {
                            "array": [
                                "u8",
                                6
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "BigFractionBytes",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "value",
                        "type": {
                            "array": [
                                "u64",
                                4
                            ]
                        }
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u64",
                                2
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "ReserveCollateral",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "mintPubkey",
                        "type": "publicKey"
                    },
                    {
                        "name": "mintTotalSupply",
                        "type": "u64"
                    },
                    {
                        "name": "supplyVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "padding1",
                        "type": {
                            "array": [
                                "u128",
                                32
                            ]
                        }
                    },
                    {
                        "name": "padding2",
                        "type": {
                            "array": [
                                "u128",
                                32
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "ReserveConfig",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "status",
                        "type": "u8"
                    },
                    {
                        "name": "paddingDeprecatedAssetTier",
                        "type": "u8"
                    },
                    {
                        "name": "hostFixedInterestRateBps",
                        "type": "u16"
                    },
                    {
                        "name": "minDeleveragingBonusBps",
                        "type": "u16"
                    },
                    {
                        "name": "blockCtokenUsage",
                        "type": "u8"
                    },
                    {
                        "name": "earlyRepayRemainingInterestPct",
                        "type": "u8"
                    },
                    {
                        "name": "emergencyMode",
                        "type": "u8"
                    },
                    {
                        "name": "reserved1",
                        "type": {
                            "array": [
                                "u8",
                                4
                            ]
                        }
                    },
                    {
                        "name": "protocolOrderExecutionFeePct",
                        "type": "u8"
                    },
                    {
                        "name": "protocolTakeRatePct",
                        "type": "u8"
                    },
                    {
                        "name": "protocolLiquidationFeePct",
                        "type": "u8"
                    },
                    {
                        "name": "loanToValuePct",
                        "type": "u8"
                    },
                    {
                        "name": "liquidationThresholdPct",
                        "type": "u8"
                    },
                    {
                        "name": "minLiquidationBonusBps",
                        "type": "u16"
                    },
                    {
                        "name": "maxLiquidationBonusBps",
                        "type": "u16"
                    },
                    {
                        "name": "badDebtLiquidationBonusBps",
                        "type": "u16"
                    },
                    {
                        "name": "deleveragingMarginCallPeriodSecs",
                        "type": "u64"
                    },
                    {
                        "name": "deleveragingThresholdDecreaseBpsPerDay",
                        "type": "u64"
                    },
                    {
                        "name": "fees",
                        "type": {
                            "defined": "ReserveFees"
                        }
                    },
                    {
                        "name": "borrowRateCurve",
                        "type": {
                            "defined": "BorrowRateCurve"
                        }
                    },
                    {
                        "name": "borrowFactorPct",
                        "type": "u64"
                    },
                    {
                        "name": "depositLimit",
                        "type": "u64"
                    },
                    {
                        "name": "borrowLimit",
                        "type": "u64"
                    },
                    {
                        "name": "tokenInfo",
                        "type": {
                            "defined": "TokenInfo"
                        }
                    },
                    {
                        "name": "depositWithdrawalCap",
                        "type": {
                            "defined": "WithdrawalCaps"
                        }
                    },
                    {
                        "name": "debtWithdrawalCap",
                        "type": {
                            "defined": "WithdrawalCaps"
                        }
                    },
                    {
                        "name": "elevationGroups",
                        "type": {
                            "array": [
                                "u8",
                                20
                            ]
                        }
                    },
                    {
                        "name": "disableUsageAsCollOutsideEmode",
                        "type": "u8"
                    },
                    {
                        "name": "utilizationLimitBlockBorrowingAbovePct",
                        "type": "u8"
                    },
                    {
                        "name": "autodeleverageEnabled",
                        "type": "u8"
                    },
                    {
                        "name": "proposerAuthorityLocked",
                        "type": "u8"
                    },
                    {
                        "name": "borrowLimitOutsideElevationGroup",
                        "type": "u64"
                    },
                    {
                        "name": "borrowLimitAgainstThisCollateralInElevationGroup",
                        "type": {
                            "array": [
                                "u64",
                                32
                            ]
                        }
                    },
                    {
                        "name": "deleveragingBonusIncreaseBpsPerDay",
                        "type": "u64"
                    },
                    {
                        "name": "debtMaturityTimestamp",
                        "type": "u64"
                    },
                    {
                        "name": "debtTermSeconds",
                        "type": "u64"
                    },
                    {
                        "name": "rewardsAmountPerSlot",
                        "type": "u64"
                    },
                    {
                        "name": "permissionedOps",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "ReserveFees",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "originationFeeSf",
                        "type": "u64"
                    },
                    {
                        "name": "flashLoanFeeSf",
                        "type": "u64"
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u8",
                                8
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "ReserveLiquidity",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "mintPubkey",
                        "type": "publicKey"
                    },
                    {
                        "name": "supplyVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "feeVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "totalAvailableAmount",
                        "type": "u64"
                    },
                    {
                        "name": "borrowedAmountSf",
                        "type": "u128"
                    },
                    {
                        "name": "marketPriceSf",
                        "type": "u128"
                    },
                    {
                        "name": "marketPriceLastUpdatedTs",
                        "type": "u64"
                    },
                    {
                        "name": "mintDecimals",
                        "type": "u64"
                    },
                    {
                        "name": "depositLimitCrossedTimestamp",
                        "type": "u64"
                    },
                    {
                        "name": "borrowLimitCrossedTimestamp",
                        "type": "u64"
                    },
                    {
                        "name": "cumulativeBorrowRateBsf",
                        "type": {
                            "defined": "BigFractionBytes"
                        }
                    },
                    {
                        "name": "accumulatedProtocolFeesSf",
                        "type": "u128"
                    },
                    {
                        "name": "accumulatedReferrerFeesSf",
                        "type": "u128"
                    },
                    {
                        "name": "pendingReferrerFeesSf",
                        "type": "u128"
                    },
                    {
                        "name": "absoluteReferralRateSf",
                        "type": "u128"
                    },
                    {
                        "name": "tokenProgram",
                        "type": "publicKey"
                    },
                    {
                        "name": "rewardsAmountAvailable",
                        "type": "u64"
                    },
                    {
                        "name": "padding2",
                        "type": {
                            "array": [
                                "u64",
                                50
                            ]
                        }
                    },
                    {
                        "name": "padding3",
                        "type": {
                            "array": [
                                "u128",
                                32
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "WithdrawQueue",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "queuedCollateralAmount",
                        "type": "u64"
                    },
                    {
                        "name": "nextIssuedTicketSequenceNumber",
                        "type": "u64"
                    },
                    {
                        "name": "nextWithdrawableTicketSequenceNumber",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "WithdrawalCaps",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "configCapacity",
                        "type": "i64"
                    },
                    {
                        "name": "currentTotal",
                        "type": "i64"
                    },
                    {
                        "name": "lastIntervalStartTimestamp",
                        "type": "u64"
                    },
                    {
                        "name": "configIntervalLengthSeconds",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "PriceHeuristic",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "lower",
                        "type": "u64"
                    },
                    {
                        "name": "upper",
                        "type": "u64"
                    },
                    {
                        "name": "exp",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "PythConfiguration",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "price",
                        "type": "publicKey"
                    }
                ]
            }
        },
        {
            "name": "ScopeConfiguration",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "priceFeed",
                        "type": "publicKey"
                    },
                    {
                        "name": "priceChain",
                        "type": {
                            "array": [
                                "u16",
                                4
                            ]
                        }
                    },
                    {
                        "name": "twapChain",
                        "type": {
                            "array": [
                                "u16",
                                4
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "SwitchboardConfiguration",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "priceAggregator",
                        "type": "publicKey"
                    },
                    {
                        "name": "twapAggregator",
                        "type": "publicKey"
                    }
                ]
            }
        },
        {
            "name": "TokenInfo",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "name",
                        "type": {
                            "array": [
                                "u8",
                                32
                            ]
                        }
                    },
                    {
                        "name": "heuristic",
                        "type": {
                            "defined": "PriceHeuristic"
                        }
                    },
                    {
                        "name": "maxTwapDivergenceBps",
                        "type": "u64"
                    },
                    {
                        "name": "maxAgePriceSeconds",
                        "type": "u64"
                    },
                    {
                        "name": "maxAgeTwapSeconds",
                        "type": "u64"
                    },
                    {
                        "name": "scopeConfiguration",
                        "type": {
                            "defined": "ScopeConfiguration"
                        }
                    },
                    {
                        "name": "switchboardConfiguration",
                        "type": {
                            "defined": "SwitchboardConfiguration"
                        }
                    },
                    {
                        "name": "pythConfiguration",
                        "type": {
                            "defined": "PythConfiguration"
                        }
                    },
                    {
                        "name": "blockPriceUsage",
                        "type": "u8"
                    },
                    {
                        "name": "reserved",
                        "type": {
                            "array": [
                                "u8",
                                7
                            ]
                        }
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u64",
                                19
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "BorrowRateCurve",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "points",
                        "type": {
                            "array": [
                                {
                                    "defined": "CurvePoint"
                                },
                                11
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "CurvePoint",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "utilizationRateBps",
                        "type": "u32"
                    },
                    {
                        "name": "borrowRateBps",
                        "type": "u32"
                    }
                ]
            }
        },
        {
            "name": "UpdateReserveWhitelistMode",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Invest",
                        "fields": [
                            "u8"
                        ]
                    },
                    {
                        "name": "AddAllocation",
                        "fields": [
                            "u8"
                        ]
                    }
                ]
            }
        },
        {
            "name": "VaultConfigField",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "PerformanceFeeBps"
                    },
                    {
                        "name": "ManagementFeeBps"
                    },
                    {
                        "name": "MinDepositAmount"
                    },
                    {
                        "name": "MinWithdrawAmount"
                    },
                    {
                        "name": "MinInvestAmount"
                    },
                    {
                        "name": "MinInvestDelaySlots"
                    },
                    {
                        "name": "CrankFundFeePerReserve"
                    },
                    {
                        "name": "PendingVaultAdmin"
                    },
                    {
                        "name": "Name"
                    },
                    {
                        "name": "LookupTable"
                    },
                    {
                        "name": "Farm"
                    },
                    {
                        "name": "AllocationAdmin"
                    },
                    {
                        "name": "UnallocatedWeight"
                    },
                    {
                        "name": "UnallocatedTokensCap"
                    },
                    {
                        "name": "WithdrawalPenaltyLamports"
                    },
                    {
                        "name": "WithdrawalPenaltyBps"
                    },
                    {
                        "name": "FirstLossCapitalFarm"
                    },
                    {
                        "name": "AllowAllocationsInWhitelistedReservesOnly"
                    },
                    {
                        "name": "AllowInvestInWhitelistedReservesOnly"
                    },
                    {
                        "name": "RewardPerSecond"
                    },
                    {
                        "name": "DepositCap"
                    }
                ]
            }
        },
        {
            "name": "VaultAllocation",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "reserve",
                        "type": "publicKey"
                    },
                    {
                        "name": "ctokenVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "targetAllocationWeight",
                        "type": "u64"
                    },
                    {
                        "name": "tokenAllocationCap",
                        "type": "u64"
                    },
                    {
                        "name": "ctokenVaultBump",
                        "type": "u64"
                    },
                    {
                        "name": "ctokenAllocationCap",
                        "type": "u64"
                    },
                    {
                        "name": "configPadding",
                        "type": {
                            "array": [
                                "u64",
                                126
                            ]
                        }
                    },
                    {
                        "name": "ctokenAllocation",
                        "type": "u64"
                    },
                    {
                        "name": "lastInvestSlot",
                        "type": "u64"
                    },
                    {
                        "name": "tokenTargetAllocationSf",
                        "type": "u128"
                    },
                    {
                        "name": "statePadding",
                        "type": {
                            "array": [
                                "u64",
                                128
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "VaultRewardInfo",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "rewardPerSecond",
                        "type": "u64"
                    },
                    {
                        "name": "lastIssuanceTs",
                        "type": "u64"
                    },
                    {
                        "name": "rewardsAvailable",
                        "type": "u64"
                    },
                    {
                        "name": "cumulativeRewardsDistributedAnalytics",
                        "type": "u64"
                    },
                    {
                        "name": "padding",
                        "type": {
                            "array": [
                                "u64",
                                8
                            ]
                        }
                    }
                ]
            }
        },
        {
            "name": "UpdateGlobalConfigMode",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "PendingAdmin",
                        "fields": [
                            "publicKey"
                        ]
                    },
                    {
                        "name": "MinWithdrawalPenaltyLamports",
                        "fields": [
                            "u64"
                        ]
                    },
                    {
                        "name": "MinWithdrawalPenaltyBPS",
                        "fields": [
                            "u64"
                        ]
                    }
                ]
            }
        }
    ],
    "events": [
        {
            "name": "DepositResultEvent",
            "fields": [
                {
                    "name": "sharesToMint",
                    "type": "u64",
                    "index": false
                },
                {
                    "name": "tokenToDeposit",
                    "type": "u64",
                    "index": false
                },
                {
                    "name": "crankFundsToDeposit",
                    "type": "u64",
                    "index": false
                }
            ]
        },
        {
            "name": "DepositUserAtaBalanceEvent",
            "fields": [
                {
                    "name": "userAtaBalance",
                    "type": "u64",
                    "index": false
                }
            ]
        },
        {
            "name": "RedeemInKindResultEvent",
            "fields": [
                {
                    "name": "sharesToBurn",
                    "type": "u64",
                    "index": false
                },
                {
                    "name": "ctokensToSendToUser",
                    "type": "u64",
                    "index": false
                }
            ]
        },
        {
            "name": "SharesToWithdrawEvent",
            "fields": [
                {
                    "name": "sharesAmount",
                    "type": "u64",
                    "index": false
                },
                {
                    "name": "userSharesBefore",
                    "type": "u64",
                    "index": false
                }
            ]
        },
        {
            "name": "WithdrawResultEvent",
            "fields": [
                {
                    "name": "sharesToBurn",
                    "type": "u64",
                    "index": false
                },
                {
                    "name": "availableToSendToUser",
                    "type": "u64",
                    "index": false
                },
                {
                    "name": "investedToDisinvestCtokens",
                    "type": "u64",
                    "index": false
                },
                {
                    "name": "investedLiquidityToSendToUser",
                    "type": "u64",
                    "index": false
                }
            ]
        }
    ],
    "errors": [
        {
            "code": 7000,
            "name": "DepositAmountsZero",
            "msg": "Cannot deposit zero tokens"
        },
        {
            "code": 7001,
            "name": "SharesIssuedAmountDoesNotMatch",
            "msg": "Post check failed on share issued"
        },
        {
            "code": 7002,
            "name": "MathOverflow",
            "msg": "Math operation overflowed"
        },
        {
            "code": 7003,
            "name": "IntegerOverflow",
            "msg": "Integer conversion overflowed"
        },
        {
            "code": 7004,
            "name": "WithdrawAmountBelowMinimum",
            "msg": "Withdrawn amount is below minimum"
        },
        {
            "code": 7005,
            "name": "TooMuchLiquidityToWithdraw",
            "msg": "TooMuchLiquidityToWithdraw"
        },
        {
            "code": 7006,
            "name": "ReserveAlreadyExists",
            "msg": "ReserveAlreadyExists"
        },
        {
            "code": 7007,
            "name": "ReserveNotPartOfAllocations",
            "msg": "ReserveNotPartOfAllocations"
        },
        {
            "code": 7008,
            "name": "CouldNotDeserializeAccountAsReserve",
            "msg": "CouldNotDeserializeAccountAsReserve"
        },
        {
            "code": 7009,
            "name": "ReserveNotProvidedInTheAccounts",
            "msg": "ReserveNotProvidedInTheAccounts"
        },
        {
            "code": 7010,
            "name": "ReserveAccountAndKeyMismatch",
            "msg": "ReserveAccountAndKeyMismatch"
        },
        {
            "code": 7011,
            "name": "OutOfRangeOfReserveIndex",
            "msg": "OutOfRangeOfReserveIndex"
        },
        {
            "code": 7012,
            "name": "CannotFindReserveInAllocations",
            "msg": "OutOfRangeOfReserveIndex"
        },
        {
            "code": 7013,
            "name": "InvestAmountBelowMinimum",
            "msg": "Invested amount is below minimum"
        },
        {
            "code": 7014,
            "name": "AdminAuthorityIncorrect",
            "msg": "AdminAuthorityIncorrect"
        },
        {
            "code": 7015,
            "name": "BaseVaultAuthorityIncorrect",
            "msg": "BaseVaultAuthorityIncorrect"
        },
        {
            "code": 7016,
            "name": "BaseVaultAuthorityBumpIncorrect",
            "msg": "BaseVaultAuthorityBumpIncorrect"
        },
        {
            "code": 7017,
            "name": "TokenMintIncorrect",
            "msg": "TokenMintIncorrect"
        },
        {
            "code": 7018,
            "name": "TokenMintDecimalsIncorrect",
            "msg": "TokenMintDecimalsIncorrect"
        },
        {
            "code": 7019,
            "name": "TokenVaultIncorrect",
            "msg": "TokenVaultIncorrect"
        },
        {
            "code": 7020,
            "name": "SharesMintDecimalsIncorrect",
            "msg": "SharesMintDecimalsIncorrect"
        },
        {
            "code": 7021,
            "name": "SharesMintIncorrect",
            "msg": "SharesMintIncorrect"
        },
        {
            "code": 7022,
            "name": "InitialAccountingIncorrect",
            "msg": "InitialAccountingIncorrect"
        },
        {
            "code": 7023,
            "name": "ReserveIsStale",
            "msg": "Reserve is stale and must be refreshed before any operation"
        },
        {
            "code": 7024,
            "name": "NotEnoughLiquidityDisinvestedToSendToUser",
            "msg": "Not enough liquidity disinvested to send to user"
        },
        {
            "code": 7025,
            "name": "BPSValueTooBig",
            "msg": "BPS value is greater than 10000"
        },
        {
            "code": 7026,
            "name": "DepositAmountBelowMinimum",
            "msg": "Deposited amount is below minimum"
        },
        {
            "code": 7027,
            "name": "ReserveSpaceExhausted",
            "msg": "Vault have no space for new reserves"
        },
        {
            "code": 7028,
            "name": "CannotWithdrawFromEmptyVault",
            "msg": "Cannot withdraw from empty vault"
        },
        {
            "code": 7029,
            "name": "TokensDepositedAmountDoesNotMatch",
            "msg": "TokensDepositedAmountDoesNotMatch"
        },
        {
            "code": 7030,
            "name": "AmountToWithdrawDoesNotMatch",
            "msg": "Amount to withdraw does not match"
        },
        {
            "code": 7031,
            "name": "LiquidityToWithdrawDoesNotMatch",
            "msg": "Liquidity to withdraw does not match"
        },
        {
            "code": 7032,
            "name": "UserReceivedAmountDoesNotMatch",
            "msg": "User received amount does not match"
        },
        {
            "code": 7033,
            "name": "SharesBurnedAmountDoesNotMatch",
            "msg": "Shares burned amount does not match"
        },
        {
            "code": 7034,
            "name": "DisinvestedLiquidityAmountDoesNotMatch",
            "msg": "Disinvested liquidity amount does not match"
        },
        {
            "code": 7035,
            "name": "SharesMintedAmountDoesNotMatch",
            "msg": "SharesMintedAmountDoesNotMatch"
        },
        {
            "code": 7036,
            "name": "AUMDecreasedAfterInvest",
            "msg": "AUM decreased after invest"
        },
        {
            "code": 7037,
            "name": "AUMBelowPendingFees",
            "msg": "AUM is below pending fees"
        },
        {
            "code": 7038,
            "name": "DepositAmountsZeroShares",
            "msg": "Deposit amount results in 0 shares"
        },
        {
            "code": 7039,
            "name": "WithdrawResultsInZeroShares",
            "msg": "Withdraw amount results in 0 shares"
        },
        {
            "code": 7040,
            "name": "CannotWithdrawZeroShares",
            "msg": "Cannot withdraw zero shares"
        },
        {
            "code": 7041,
            "name": "ManagementFeeGreaterThanMaxAllowed",
            "msg": "Management fee is greater than maximum allowed"
        },
        {
            "code": 7042,
            "name": "VaultAUMZero",
            "msg": "Vault assets under management are empty"
        },
        {
            "code": 7043,
            "name": "MissingReserveForBatchRefresh",
            "msg": "Missing reserve for batch refresh"
        },
        {
            "code": 7044,
            "name": "MinWithdrawAmountTooBig",
            "msg": "Min withdraw amount is too big"
        },
        {
            "code": 7045,
            "name": "InvestTooSoon",
            "msg": "Invest is called too soon after last invest"
        },
        {
            "code": 7046,
            "name": "WrongAdminOrAllocationAdmin",
            "msg": "Wrong admin or allocation admin"
        },
        {
            "code": 7047,
            "name": "ReserveHasNonZeroAllocationOrCTokens",
            "msg": "Reserve has non-zero allocation or ctokens so cannot be removed"
        },
        {
            "code": 7048,
            "name": "DepositAmountGreaterThanRequestedAmount",
            "msg": "Deposit amount is greater than requested amount"
        },
        {
            "code": 7049,
            "name": "WithdrawAmountLessThanWithdrawalPenalty",
            "msg": "Withdraw amount is less than withdrawal penalty"
        },
        {
            "code": 7050,
            "name": "CannotWithdrawZeroLamports",
            "msg": "Cannot withdraw 0 lamports"
        },
        {
            "code": 7051,
            "name": "NoUpgradeAuthority",
            "msg": "Cannot initialize global config because there is no upgrade authority to the program"
        },
        {
            "code": 7052,
            "name": "WithdrawalFeeBPSGreaterThanMaxAllowed",
            "msg": "Withdrawal fee BPS is greater than maximum allowed"
        },
        {
            "code": 7053,
            "name": "WithdrawalFeeLamportsGreaterThanMaxAllowed",
            "msg": "Withdrawal fee lamports is greater than maximum allowed"
        },
        {
            "code": 7054,
            "name": "ReserveNotWhitelisted",
            "msg": "Reserve is not whitelisted"
        },
        {
            "code": 7055,
            "name": "InvalidBoolLikeValue",
            "msg": "Invalid bool-like value passed in (should be 0 or 1)"
        },
        {
            "code": 7056,
            "name": "AUMDecreasedMoreThanExpected",
            "msg": "AUM decreased more than expected during redeem in kind"
        },
        {
            "code": 7057,
            "name": "RewardTopupAmountZero",
            "msg": "Reward topup amount is zero"
        },
        {
            "code": 7058,
            "name": "RewardTopupAmountNotExpected",
            "msg": "Reward topup is not as expected after transfer"
        },
        {
            "code": 7059,
            "name": "RewardWithdrawAmountZero",
            "msg": "Reward withdraw amount is zero"
        },
        {
            "code": 7060,
            "name": "RewardWithdrawAmountNotExpected",
            "msg": "Reward withdraw is not as expected after transfer"
        },
        {
            "code": 7061,
            "name": "RewardsStaleForFeeUpdate",
            "msg": "Rewards are stale - must be refreshed before updating fees"
        },
        {
            "code": 7062,
            "name": "VaultDepositCapReached",
            "msg": "Vault deposit cap reached"
        },
        {
            "code": 7063,
            "name": "MaxInvestAmountMustBeGreaterThanZero",
            "msg": "max_amount must be greater than 0"
        },
        {
            "code": 7064,
            "name": "SharesOutBelowMinimum",
            "msg": "Shares out is below minimum requested"
        }
    ]
}
