@elemental-stv-core/sdk 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/elemental-lend/accounts.d.ts +4 -1
  2. package/dist/elemental-lend/accounts.d.ts.map +1 -1
  3. package/dist/elemental-lend/accounts.js +34 -0
  4. package/dist/elemental-lend/accounts.js.map +1 -1
  5. package/dist/elemental-lend/constants.d.ts +5 -0
  6. package/dist/elemental-lend/constants.d.ts.map +1 -1
  7. package/dist/elemental-lend/constants.js +9 -1
  8. package/dist/elemental-lend/constants.js.map +1 -1
  9. package/dist/elemental-lend/index.d.ts +2 -0
  10. package/dist/elemental-lend/index.d.ts.map +1 -1
  11. package/dist/elemental-lend/index.js +2 -0
  12. package/dist/elemental-lend/index.js.map +1 -1
  13. package/dist/elemental-lend/instructions.d.ts +24 -4
  14. package/dist/elemental-lend/instructions.d.ts.map +1 -1
  15. package/dist/elemental-lend/instructions.js +49 -12
  16. package/dist/elemental-lend/instructions.js.map +1 -1
  17. package/dist/elemental-lend/jupiter-lend.d.ts +36 -0
  18. package/dist/elemental-lend/jupiter-lend.d.ts.map +1 -1
  19. package/dist/elemental-lend/jupiter-lend.js +94 -1
  20. package/dist/elemental-lend/jupiter-lend.js.map +1 -1
  21. package/dist/elemental-lend/kamino-vault.d.ts +173 -0
  22. package/dist/elemental-lend/kamino-vault.d.ts.map +1 -0
  23. package/dist/elemental-lend/kamino-vault.js +460 -0
  24. package/dist/elemental-lend/kamino-vault.js.map +1 -0
  25. package/dist/elemental-lend/pda.d.ts +1 -0
  26. package/dist/elemental-lend/pda.d.ts.map +1 -1
  27. package/dist/elemental-lend/pda.js +4 -0
  28. package/dist/elemental-lend/pda.js.map +1 -1
  29. package/dist/elemental-lend/protocol-actions.d.ts +49 -0
  30. package/dist/elemental-lend/protocol-actions.d.ts.map +1 -0
  31. package/dist/elemental-lend/protocol-actions.js +228 -0
  32. package/dist/elemental-lend/protocol-actions.js.map +1 -0
  33. package/dist/elemental-lend/types.d.ts +17 -1
  34. package/dist/elemental-lend/types.d.ts.map +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2 -2
  38. package/dist/index.js.map +1 -1
  39. package/dist/jlpd-strategy/accounts.d.ts +17 -0
  40. package/dist/jlpd-strategy/accounts.d.ts.map +1 -0
  41. package/dist/{jlp-strategy → jlpd-strategy}/accounts.js +50 -28
  42. package/dist/jlpd-strategy/accounts.js.map +1 -0
  43. package/dist/jlpd-strategy/constants.d.ts +62 -0
  44. package/dist/jlpd-strategy/constants.d.ts.map +1 -0
  45. package/dist/jlpd-strategy/constants.js +86 -0
  46. package/dist/jlpd-strategy/constants.js.map +1 -0
  47. package/dist/jlpd-strategy/index.d.ts +9 -0
  48. package/dist/jlpd-strategy/index.d.ts.map +1 -0
  49. package/dist/{jlp-strategy → jlpd-strategy}/index.js +4 -0
  50. package/dist/jlpd-strategy/index.js.map +1 -0
  51. package/dist/jlpd-strategy/instructions.d.ts +41 -0
  52. package/dist/jlpd-strategy/instructions.d.ts.map +1 -0
  53. package/dist/jlpd-strategy/instructions.js +64 -0
  54. package/dist/jlpd-strategy/instructions.js.map +1 -0
  55. package/dist/jlpd-strategy/jlp-data.d.ts +73 -0
  56. package/dist/jlpd-strategy/jlp-data.d.ts.map +1 -0
  57. package/dist/jlpd-strategy/jlp-data.js +406 -0
  58. package/dist/jlpd-strategy/jlp-data.js.map +1 -0
  59. package/dist/jlpd-strategy/pda.d.ts +8 -0
  60. package/dist/jlpd-strategy/pda.d.ts.map +1 -0
  61. package/dist/{jlp-strategy → jlpd-strategy}/pda.js +10 -3
  62. package/dist/jlpd-strategy/pda.js.map +1 -0
  63. package/dist/jlpd-strategy/settle-yield.d.ts +54 -0
  64. package/dist/jlpd-strategy/settle-yield.d.ts.map +1 -0
  65. package/dist/jlpd-strategy/settle-yield.js +103 -0
  66. package/dist/jlpd-strategy/settle-yield.js.map +1 -0
  67. package/dist/jlpd-strategy/swap-jlp.d.ts +151 -0
  68. package/dist/jlpd-strategy/swap-jlp.d.ts.map +1 -0
  69. package/dist/jlpd-strategy/swap-jlp.js +429 -0
  70. package/dist/jlpd-strategy/swap-jlp.js.map +1 -0
  71. package/dist/jlpd-strategy/types.d.ts +56 -0
  72. package/dist/jlpd-strategy/types.d.ts.map +1 -0
  73. package/dist/{jlp-strategy → jlpd-strategy}/types.js.map +1 -1
  74. package/dist/p-stv-core/accounts.d.ts +4 -1
  75. package/dist/p-stv-core/accounts.d.ts.map +1 -1
  76. package/dist/p-stv-core/accounts.js +59 -22
  77. package/dist/p-stv-core/accounts.js.map +1 -1
  78. package/dist/p-stv-core/constants.d.ts +12 -1
  79. package/dist/p-stv-core/constants.d.ts.map +1 -1
  80. package/dist/p-stv-core/constants.js +16 -2
  81. package/dist/p-stv-core/constants.js.map +1 -1
  82. package/dist/p-stv-core/events.d.ts.map +1 -1
  83. package/dist/p-stv-core/events.js +21 -9
  84. package/dist/p-stv-core/events.js.map +1 -1
  85. package/dist/p-stv-core/index.d.ts +4 -0
  86. package/dist/p-stv-core/index.d.ts.map +1 -1
  87. package/dist/p-stv-core/index.js +4 -0
  88. package/dist/p-stv-core/index.js.map +1 -1
  89. package/dist/p-stv-core/instructions.d.ts +58 -1
  90. package/dist/p-stv-core/instructions.d.ts.map +1 -1
  91. package/dist/p-stv-core/instructions.js +93 -9
  92. package/dist/p-stv-core/instructions.js.map +1 -1
  93. package/dist/p-stv-core/pda.d.ts +1 -0
  94. package/dist/p-stv-core/pda.d.ts.map +1 -1
  95. package/dist/p-stv-core/pda.js +4 -0
  96. package/dist/p-stv-core/pda.js.map +1 -1
  97. package/dist/p-stv-core/prices.d.ts +21 -0
  98. package/dist/p-stv-core/prices.d.ts.map +1 -0
  99. package/dist/p-stv-core/prices.js +78 -0
  100. package/dist/p-stv-core/prices.js.map +1 -0
  101. package/dist/p-stv-core/remaining-accounts.d.ts +99 -0
  102. package/dist/p-stv-core/remaining-accounts.d.ts.map +1 -0
  103. package/dist/p-stv-core/remaining-accounts.js +262 -0
  104. package/dist/p-stv-core/remaining-accounts.js.map +1 -0
  105. package/dist/p-stv-core/send-tx.d.ts +56 -0
  106. package/dist/p-stv-core/send-tx.d.ts.map +1 -0
  107. package/dist/p-stv-core/send-tx.js +299 -0
  108. package/dist/p-stv-core/send-tx.js.map +1 -0
  109. package/dist/p-stv-core/sol-wrap.d.ts +35 -0
  110. package/dist/p-stv-core/sol-wrap.d.ts.map +1 -0
  111. package/dist/p-stv-core/sol-wrap.js +95 -0
  112. package/dist/p-stv-core/sol-wrap.js.map +1 -0
  113. package/dist/p-stv-core/types.d.ts +35 -4
  114. package/dist/p-stv-core/types.d.ts.map +1 -1
  115. package/package.json +5 -5
  116. package/dist/jlp-strategy/accounts.d.ts +0 -11
  117. package/dist/jlp-strategy/accounts.d.ts.map +0 -1
  118. package/dist/jlp-strategy/accounts.js.map +0 -1
  119. package/dist/jlp-strategy/constants.d.ts +0 -36
  120. package/dist/jlp-strategy/constants.d.ts.map +0 -1
  121. package/dist/jlp-strategy/constants.js +0 -47
  122. package/dist/jlp-strategy/constants.js.map +0 -1
  123. package/dist/jlp-strategy/index.d.ts +0 -5
  124. package/dist/jlp-strategy/index.d.ts.map +0 -1
  125. package/dist/jlp-strategy/index.js.map +0 -1
  126. package/dist/jlp-strategy/pda.d.ts +0 -5
  127. package/dist/jlp-strategy/pda.d.ts.map +0 -1
  128. package/dist/jlp-strategy/pda.js.map +0 -1
  129. package/dist/jlp-strategy/types.d.ts +0 -25
  130. package/dist/jlp-strategy/types.d.ts.map +0 -1
  131. /package/dist/{jlp-strategy → jlpd-strategy}/types.js +0 -0
@@ -0,0 +1,460 @@
1
+ "use strict";
2
+ /**
3
+ * Kamino kVault account builders for deposit/withdraw.
4
+ *
5
+ * Builds the remaining_accounts arrays needed by elemental-lend's
6
+ * kvault_deposit and kvault_withdraw instructions.
7
+ *
8
+ * For deposit: 11 fixed accounts derived from vault_state PDAs.
9
+ * For withdraw: 21 fixed accounts — first 12 derivable, then 9 KLend-specific
10
+ * accounts read from vault_state and reserve on-chain data.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.KVAULT_STALENESS_THRESHOLD = exports.KAMINO_GLOBAL_CONFIG = exports.KLEND_PROGRAM = void 0;
14
+ exports.findKvaultTokenVault = findKvaultTokenVault;
15
+ exports.findKvaultAuthority = findKvaultAuthority;
16
+ exports.findKvaultSharesMint = findKvaultSharesMint;
17
+ exports.findKvaultEventAuthority = findKvaultEventAuthority;
18
+ exports.findLendingMarketAuthority = findLendingMarketAuthority;
19
+ exports.readVaultAllocation = readVaultAllocation;
20
+ exports.readReserveAccounts = readReserveAccounts;
21
+ exports.buildKvaultDepositAccounts = buildKvaultDepositAccounts;
22
+ exports.buildKvaultWithdrawReserveConfig = buildKvaultWithdrawReserveConfig;
23
+ exports.buildKvaultWithdrawAccounts = buildKvaultWithdrawAccounts;
24
+ exports.readKvaultLastFeeChargeTs = readKvaultLastFeeChargeTs;
25
+ exports.isKvaultStale = isKvaultStale;
26
+ exports.findStaleKvaults = findStaleKvaults;
27
+ exports.buildKaminoInvestIx = buildKaminoInvestIx;
28
+ exports.buildKaminoInvestIxsIfStale = buildKaminoInvestIxsIfStale;
29
+ const web3_js_1 = require("@solana/web3.js");
30
+ const constants_1 = require("./constants");
31
+ // ---------------------------------------------------------------------------
32
+ // Constants
33
+ // ---------------------------------------------------------------------------
34
+ /** KLend program ID */
35
+ exports.KLEND_PROGRAM = new web3_js_1.PublicKey("KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD");
36
+ /** Kamino Vault global config (singleton, mainnet) */
37
+ exports.KAMINO_GLOBAL_CONFIG = new web3_js_1.PublicKey("BKyTcUe6daNG8HbgBix2ugdRHbykG2dK9hPBBqhUyoEX");
38
+ /** SPL Token program */
39
+ const SPL_TOKEN_PROGRAM = new web3_js_1.PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
40
+ /** Sysvar Instructions */
41
+ const SYSVAR_INSTRUCTIONS = new web3_js_1.PublicKey("Sysvar1nstructions1111111111111111111111111");
42
+ // ---------------------------------------------------------------------------
43
+ // PDA Derivation Helpers
44
+ // ---------------------------------------------------------------------------
45
+ /** Derive token_vault PDA: ["token_vault", vault_state] under Kamino Vault */
46
+ function findKvaultTokenVault(vaultState) {
47
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("token_vault"), vaultState.toBuffer()], constants_1.KAMINO_VAULT_PROGRAM);
48
+ }
49
+ /** Derive base_vault_authority PDA: ["authority", vault_state] under Kamino Vault */
50
+ function findKvaultAuthority(vaultState) {
51
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("authority"), vaultState.toBuffer()], constants_1.KAMINO_VAULT_PROGRAM);
52
+ }
53
+ /** Derive shares_mint PDA: ["shares", vault_state] under Kamino Vault */
54
+ function findKvaultSharesMint(vaultState) {
55
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("shares"), vaultState.toBuffer()], constants_1.KAMINO_VAULT_PROGRAM);
56
+ }
57
+ /** Derive event_authority PDA: ["__event_authority"] under Kamino Vault */
58
+ function findKvaultEventAuthority() {
59
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("__event_authority")], constants_1.KAMINO_VAULT_PROGRAM);
60
+ }
61
+ /** Derive lending_market_authority PDA: ["lma", lending_market] under KLend */
62
+ function findLendingMarketAuthority(lendingMarket) {
63
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("lma"), lendingMarket.toBuffer()], exports.KLEND_PROGRAM);
64
+ }
65
+ // ---------------------------------------------------------------------------
66
+ // VaultState / Reserve Data Readers
67
+ // ---------------------------------------------------------------------------
68
+ /**
69
+ * Kamino VaultState layout offsets (from account data start, including 8-byte discriminator).
70
+ *
71
+ * VaultAllocation[0] starts at offset 312:
72
+ * [312..344] reserve (Pubkey)
73
+ * [344..376] ctokenVault (Pubkey)
74
+ * Each VaultAllocation is 2160 bytes. Index N starts at 312 + N*2160.
75
+ */
76
+ const VAULT_ALLOCATION_OFFSET = 312; // 8 disc + 304 struct offset
77
+ const VAULT_ALLOCATION_SIZE = 2160;
78
+ /**
79
+ * KLend Reserve layout offsets (from account data start, including 8-byte discriminator).
80
+ * [32..64] lendingMarket (Pubkey)
81
+ * [160..192] liquidity.supplyVault (Pubkey)
82
+ * [408..440] liquidity.tokenProgram (Pubkey)
83
+ * [2560..2592] collateral.mintPubkey (Pubkey)
84
+ */
85
+ const RESERVE_LENDING_MARKET_OFFSET = 32;
86
+ const RESERVE_LIQUIDITY_SUPPLY_OFFSET = 160;
87
+ const RESERVE_LIQUIDITY_TOKEN_PROGRAM_OFFSET = 408;
88
+ const RESERVE_COLLATERAL_MINT_OFFSET = 2560;
89
+ /** Read a Pubkey from a Buffer at a given offset */
90
+ function readPubkey(data, offset) {
91
+ return new web3_js_1.PublicKey(data.slice(offset, offset + 32));
92
+ }
93
+ /**
94
+ * Read the first VaultAllocation's reserve and ctokenVault from VaultState data.
95
+ *
96
+ * @param vaultStateData - Raw account data (including 8-byte discriminator)
97
+ * @param allocationIndex - Which allocation slot to read (default 0)
98
+ */
99
+ function readVaultAllocation(vaultStateData, allocationIndex = 0) {
100
+ const base = VAULT_ALLOCATION_OFFSET + allocationIndex * VAULT_ALLOCATION_SIZE;
101
+ if (vaultStateData.length < base + 64) {
102
+ throw new Error(`VaultState data too short for allocation ${allocationIndex}: need ${base + 64}, got ${vaultStateData.length}`);
103
+ }
104
+ return {
105
+ reserve: readPubkey(vaultStateData, base),
106
+ ctokenVault: readPubkey(vaultStateData, base + 32),
107
+ };
108
+ }
109
+ /**
110
+ * Read KLend-specific accounts from a Reserve account's raw data.
111
+ *
112
+ * @param reserveData - Raw KLend Reserve account data (including 8-byte discriminator)
113
+ */
114
+ function readReserveAccounts(reserveData) {
115
+ if (reserveData.length < RESERVE_COLLATERAL_MINT_OFFSET + 32) {
116
+ throw new Error(`Reserve data too short: need ${RESERVE_COLLATERAL_MINT_OFFSET + 32}, got ${reserveData.length}`);
117
+ }
118
+ return {
119
+ lendingMarket: readPubkey(reserveData, RESERVE_LENDING_MARKET_OFFSET),
120
+ reserveLiquiditySupply: readPubkey(reserveData, RESERVE_LIQUIDITY_SUPPLY_OFFSET),
121
+ reserveCollateralMint: readPubkey(reserveData, RESERVE_COLLATERAL_MINT_OFFSET),
122
+ reserveCollateralTokenProgram: readPubkey(reserveData, RESERVE_LIQUIDITY_TOKEN_PROGRAM_OFFSET),
123
+ };
124
+ }
125
+ // ---------------------------------------------------------------------------
126
+ // Deposit Account Builder (11 fixed accounts)
127
+ // ---------------------------------------------------------------------------
128
+ /**
129
+ * Build the 11 remaining_accounts for elemental-lend's kvault_deposit instruction.
130
+ *
131
+ * Account order matches kamino_vault::deposit_accounts:
132
+ * 0. strategy_state PDA (signer, mut)
133
+ * 1. vault_state (mut)
134
+ * 2. token_vault (mut) — PDA ["token_vault", vault_state]
135
+ * 3. token_mint — base token mint
136
+ * 4. base_vault_authority — PDA ["authority", vault_state]
137
+ * 5. shares_mint (mut) — PDA ["shares", vault_state]
138
+ * 6. user_token_ata (mut) — strategy's base ATA
139
+ * 7. user_shares_ata (mut) — strategy's kvToken ATA
140
+ * 8. klend_program
141
+ * 9. token_program — SPL Token
142
+ * 10. shares_token_program — SPL Token
143
+ *
144
+ * After the 11 fixed accounts, callers should append reserve accounts for refresh.
145
+ */
146
+ function buildKvaultDepositAccounts(vaultState, strategyStatePda, strategyBaseAta, strategySharesAta, baseMint, reserves = []) {
147
+ const [tokenVault] = findKvaultTokenVault(vaultState);
148
+ const [authority] = findKvaultAuthority(vaultState);
149
+ const [sharesMint] = findKvaultSharesMint(vaultState);
150
+ const [eventAuthority] = findKvaultEventAuthority();
151
+ const accounts = [
152
+ { pubkey: strategyStatePda, isSigner: true, isWritable: true }, // 0
153
+ { pubkey: vaultState, isSigner: false, isWritable: true }, // 1
154
+ { pubkey: tokenVault, isSigner: false, isWritable: true }, // 2
155
+ { pubkey: baseMint, isSigner: false, isWritable: false }, // 3
156
+ { pubkey: authority, isSigner: false, isWritable: false }, // 4
157
+ { pubkey: sharesMint, isSigner: false, isWritable: true }, // 5
158
+ { pubkey: strategyBaseAta, isSigner: false, isWritable: true }, // 6
159
+ { pubkey: strategySharesAta, isSigner: false, isWritable: true }, // 7
160
+ { pubkey: exports.KLEND_PROGRAM, isSigner: false, isWritable: false }, // 8
161
+ { pubkey: SPL_TOKEN_PROGRAM, isSigner: false, isWritable: false }, // 9
162
+ { pubkey: SPL_TOKEN_PROGRAM, isSigner: false, isWritable: false }, // 10
163
+ { pubkey: eventAuthority, isSigner: false, isWritable: false }, // 11 (Anchor event CPI)
164
+ { pubkey: constants_1.KAMINO_VAULT_PROGRAM, isSigner: false, isWritable: false }, // 12 (program self-ref)
165
+ ];
166
+ // Append reserve accounts for KLend batch refresh (writable), then unique lending markets (readonly).
167
+ // Kamino's cpi_refresh_reserves uses .take(reserves_count) to get just the reserves,
168
+ // then reads lending_market from each reserve's data for the CPI. The lending_market
169
+ // AccountInfo must be in the transaction but after the reserves.
170
+ const seenMarkets = new Set();
171
+ for (const { reserve } of reserves) {
172
+ accounts.push({ pubkey: reserve, isSigner: false, isWritable: true });
173
+ }
174
+ for (const { lendingMarket } of reserves) {
175
+ const key = lendingMarket.toBase58();
176
+ if (!seenMarkets.has(key)) {
177
+ seenMarkets.add(key);
178
+ accounts.push({ pubkey: lendingMarket, isSigner: false, isWritable: false });
179
+ }
180
+ }
181
+ return accounts;
182
+ }
183
+ /**
184
+ * Build the KvaultWithdrawReserveConfig from raw on-chain data.
185
+ *
186
+ * @param vaultStateData - Raw Kamino VaultState account data
187
+ * @param reserveData - Raw KLend Reserve account data
188
+ * @param allocationIndex - VaultAllocation index (default 0)
189
+ */
190
+ function buildKvaultWithdrawReserveConfig(vaultStateData, reserveData, allocationIndex = 0) {
191
+ const alloc = readVaultAllocation(vaultStateData, allocationIndex);
192
+ const res = readReserveAccounts(reserveData);
193
+ const [lendingMarketAuthority] = findLendingMarketAuthority(res.lendingMarket);
194
+ return {
195
+ reserve: alloc.reserve,
196
+ ctokenVault: alloc.ctokenVault,
197
+ lendingMarket: res.lendingMarket,
198
+ lendingMarketAuthority,
199
+ reserveLiquiditySupply: res.reserveLiquiditySupply,
200
+ reserveCollateralMint: res.reserveCollateralMint,
201
+ reserveCollateralTokenProgram: res.reserveCollateralTokenProgram,
202
+ };
203
+ }
204
+ /**
205
+ * Build the 21 remaining_accounts for elemental-lend's kvault_withdraw instruction.
206
+ *
207
+ * Account order matches kamino_vault::withdraw_accounts:
208
+ * WithdrawFromAvailable (0-11):
209
+ * 0. strategy_state PDA (signer, mut)
210
+ * 1. vault_state (mut)
211
+ * 2. global_config
212
+ * 3. token_vault (mut)
213
+ * 4. base_vault_authority
214
+ * 5. user_token_ata (mut) — strategy's base ATA
215
+ * 6. token_mint (mut)
216
+ * 7. user_shares_ata (mut) — strategy's kvToken ATA
217
+ * 8. shares_mint (mut)
218
+ * 9. token_program
219
+ * 10. shares_token_program
220
+ * 11. klend_program
221
+ * WithdrawFromInvested (12-20):
222
+ * 12. vault_state (mut, dup)
223
+ * 13. reserve (mut)
224
+ * 14. ctoken_vault (mut)
225
+ * 15. lending_market
226
+ * 16. lending_market_authority
227
+ * 17. reserve_liquidity_supply (mut)
228
+ * 18. reserve_collateral_mint (mut)
229
+ * 19. reserve_collateral_token_program
230
+ * 20. instruction_sysvar_account
231
+ *
232
+ * After the 21 fixed accounts, callers should append reserve accounts for refresh.
233
+ */
234
+ function buildKvaultWithdrawAccounts(vaultState, strategyStatePda, strategyBaseAta, strategySharesAta, baseMint, reserveConfig, globalConfig = exports.KAMINO_GLOBAL_CONFIG) {
235
+ const [tokenVault] = findKvaultTokenVault(vaultState);
236
+ const [authority] = findKvaultAuthority(vaultState);
237
+ const [sharesMint] = findKvaultSharesMint(vaultState);
238
+ const [eventAuthority] = findKvaultEventAuthority();
239
+ return [
240
+ // WithdrawFromAvailable (0-11)
241
+ { pubkey: strategyStatePda, isSigner: true, isWritable: true }, // 0
242
+ { pubkey: vaultState, isSigner: false, isWritable: true }, // 1
243
+ { pubkey: globalConfig, isSigner: false, isWritable: false }, // 2
244
+ { pubkey: tokenVault, isSigner: false, isWritable: true }, // 3
245
+ { pubkey: authority, isSigner: false, isWritable: false }, // 4
246
+ { pubkey: strategyBaseAta, isSigner: false, isWritable: true }, // 5
247
+ { pubkey: baseMint, isSigner: false, isWritable: true }, // 6
248
+ { pubkey: strategySharesAta, isSigner: false, isWritable: true }, // 7
249
+ { pubkey: sharesMint, isSigner: false, isWritable: true }, // 8
250
+ { pubkey: SPL_TOKEN_PROGRAM, isSigner: false, isWritable: false }, // 9
251
+ { pubkey: SPL_TOKEN_PROGRAM, isSigner: false, isWritable: false }, // 10
252
+ { pubkey: exports.KLEND_PROGRAM, isSigner: false, isWritable: false }, // 11
253
+ // WithdrawFromAvailable event CPI (12-13)
254
+ { pubkey: eventAuthority, isSigner: false, isWritable: false }, // 12
255
+ { pubkey: constants_1.KAMINO_VAULT_PROGRAM, isSigner: false, isWritable: false }, // 13
256
+ // WithdrawFromInvested (14-22)
257
+ { pubkey: vaultState, isSigner: false, isWritable: true }, // 14 (dup)
258
+ { pubkey: reserveConfig.reserve, isSigner: false, isWritable: true }, // 15
259
+ { pubkey: reserveConfig.ctokenVault, isSigner: false, isWritable: true }, // 16
260
+ { pubkey: reserveConfig.lendingMarket, isSigner: false, isWritable: false }, // 17
261
+ { pubkey: reserveConfig.lendingMarketAuthority, isSigner: false, isWritable: false }, // 18
262
+ { pubkey: reserveConfig.reserveLiquiditySupply, isSigner: false, isWritable: true }, // 19
263
+ { pubkey: reserveConfig.reserveCollateralMint, isSigner: false, isWritable: true }, // 20
264
+ { pubkey: reserveConfig.reserveCollateralTokenProgram, isSigner: false, isWritable: false }, // 21
265
+ { pubkey: SYSVAR_INSTRUCTIONS, isSigner: false, isWritable: false }, // 22
266
+ // Withdraw event CPI (23-24)
267
+ { pubkey: eventAuthority, isSigner: false, isWritable: false }, // 23
268
+ { pubkey: constants_1.KAMINO_VAULT_PROGRAM, isSigner: false, isWritable: false }, // 24
269
+ ];
270
+ }
271
+ // ---------------------------------------------------------------------------
272
+ // Kamino kVault Staleness Check
273
+ // ---------------------------------------------------------------------------
274
+ /** Offset of `last_fee_charge_timestamp` (u64) in Kamino VaultState account data */
275
+ const KVAULT_LAST_FEE_CHARGE_TS_OFFSET = 272; // 8 disc + 264
276
+ /** Minimum data length to read `last_fee_charge_timestamp` */
277
+ const KVAULT_MIN_READ_SIZE = KVAULT_LAST_FEE_CHARGE_TS_OFFSET + 8;
278
+ /** Staleness threshold in seconds (matches elemental-lend KVAULT_STALENESS_THRESHOLD) */
279
+ exports.KVAULT_STALENESS_THRESHOLD = 120;
280
+ /**
281
+ * Read `last_fee_charge_timestamp` from raw Kamino VaultState account data.
282
+ * Returns undefined if data is too short.
283
+ */
284
+ function readKvaultLastFeeChargeTs(data) {
285
+ if (data.length < KVAULT_MIN_READ_SIZE)
286
+ return undefined;
287
+ const buf = Buffer.from(data);
288
+ // Read as u64 LE — timestamp fits in a regular number
289
+ return Number(buf.readBigUInt64LE(KVAULT_LAST_FEE_CHARGE_TS_OFFSET));
290
+ }
291
+ /**
292
+ * Check if a Kamino kVault is stale (needs an `invest` call to refresh).
293
+ *
294
+ * @param vaultStateData - Raw account data for the Kamino VaultState
295
+ * @param currentSlotTimestamp - Current cluster timestamp (seconds)
296
+ * @returns true if the vault is stale (last_fee_charge_timestamp is older than threshold)
297
+ */
298
+ function isKvaultStale(vaultStateData, currentSlotTimestamp) {
299
+ const ts = readKvaultLastFeeChargeTs(vaultStateData);
300
+ if (ts === undefined)
301
+ return true; // can't read — assume stale
302
+ return (currentSlotTimestamp - ts) > exports.KVAULT_STALENESS_THRESHOLD;
303
+ }
304
+ /**
305
+ * Check if any registered kVault protocol is stale and return the stale vault states.
306
+ *
307
+ * @param connection - Solana connection
308
+ * @param protocols - Protocol pubkeys from the lend strategy state
309
+ * @returns Array of stale kVault state pubkeys
310
+ */
311
+ async function findStaleKvaults(connection, protocols) {
312
+ if (protocols.length === 0)
313
+ return [];
314
+ const [accountInfos, slot] = await Promise.all([
315
+ connection.getMultipleAccountsInfo(protocols),
316
+ connection.getSlot("confirmed"),
317
+ ]);
318
+ // Estimate timestamp from slot (not exact, but close enough for staleness)
319
+ const epochInfo = await connection.getEpochInfo("confirmed");
320
+ const blockTime = await connection.getBlockTime(slot);
321
+ const currentTs = blockTime ?? Math.floor(Date.now() / 1000);
322
+ const stale = [];
323
+ for (let i = 0; i < protocols.length; i++) {
324
+ const info = accountInfos[i];
325
+ if (!info)
326
+ continue;
327
+ // Only check accounts owned by Kamino Vault program
328
+ if (!info.owner.equals(constants_1.KAMINO_VAULT_PROGRAM))
329
+ continue;
330
+ if (isKvaultStale(info.data, currentTs)) {
331
+ stale.push(protocols[i]);
332
+ }
333
+ }
334
+ void epochInfo; // suppress unused warning
335
+ return stale;
336
+ }
337
+ // ---------------------------------------------------------------------------
338
+ // Kamino Invest Instruction Builder
339
+ // ---------------------------------------------------------------------------
340
+ /** Anchor discriminator: sha256("global:invest")[..8] */
341
+ const IX_INVEST = Buffer.from([13, 245, 180, 103, 254, 182, 121, 4]);
342
+ /** PDA seed for ctoken_vault: ["ctoken_vault", vault_state, reserve] */
343
+ const CTOKEN_VAULT_SEED = Buffer.from("ctoken_vault");
344
+ /** PDA seed for whitelisted_reserves: ["whitelisted_reserves", reserve] */
345
+ const WHITELISTED_RESERVES_SEED = Buffer.from("whitelisted_reserves");
346
+ /**
347
+ * Build a Kamino `invest` instruction to refresh a stale kVault.
348
+ *
349
+ * `invest` is permissionless — anyone can call it. It refreshes the vault's
350
+ * `last_fee_charge_timestamp` which is required for elemental-lend's update_aum
351
+ * staleness check (120s threshold).
352
+ *
353
+ * @param payer - Transaction signer (pays for any crank fee, usually 0)
354
+ * @param payerTokenAccount - Payer's base token ATA (for crank fee)
355
+ * @param vaultState - Kamino vault_state pubkey
356
+ * @param baseMint - Base token mint (e.g., USDC)
357
+ * @param vaultStateData - Raw vault_state account data (for reading allocation)
358
+ * @param reserveData - Raw KLend reserve account data (for reading lending_market, etc.)
359
+ * @param allocationIndex - Which vault allocation to invest (default 0)
360
+ */
361
+ function buildKaminoInvestIx(payer, payerTokenAccount, vaultState, baseMint, vaultStateData, reserveData, allocationIndex = 0) {
362
+ const alloc = readVaultAllocation(vaultStateData, allocationIndex);
363
+ const res = readReserveAccounts(reserveData);
364
+ const [lendingMarketAuthority] = findLendingMarketAuthority(res.lendingMarket);
365
+ const [tokenVault] = findKvaultTokenVault(vaultState);
366
+ const [authority] = findKvaultAuthority(vaultState);
367
+ // ctoken_vault PDA: ["ctoken_vault", vault_state, reserve] under Kamino
368
+ const [ctokenVault] = web3_js_1.PublicKey.findProgramAddressSync([CTOKEN_VAULT_SEED, vaultState.toBuffer(), alloc.reserve.toBuffer()], constants_1.KAMINO_VAULT_PROGRAM);
369
+ // reserve_whitelist_entry PDA: ["whitelisted_reserves", reserve] under Kamino (optional)
370
+ const [reserveWhitelist] = web3_js_1.PublicKey.findProgramAddressSync([WHITELISTED_RESERVES_SEED, alloc.reserve.toBuffer()], constants_1.KAMINO_VAULT_PROGRAM);
371
+ const keys = [
372
+ { pubkey: payer, isSigner: true, isWritable: true }, // 0: payer
373
+ { pubkey: payerTokenAccount, isSigner: false, isWritable: true }, // 1: payer_token_account
374
+ { pubkey: vaultState, isSigner: false, isWritable: true }, // 2: vault_state
375
+ { pubkey: tokenVault, isSigner: false, isWritable: true }, // 3: token_vault
376
+ { pubkey: baseMint, isSigner: false, isWritable: true }, // 4: token_mint
377
+ { pubkey: authority, isSigner: false, isWritable: true }, // 5: base_vault_authority
378
+ { pubkey: ctokenVault, isSigner: false, isWritable: true }, // 6: ctoken_vault
379
+ { pubkey: alloc.reserve, isSigner: false, isWritable: true }, // 7: reserve
380
+ { pubkey: res.lendingMarket, isSigner: false, isWritable: false }, // 8: lending_market
381
+ { pubkey: lendingMarketAuthority, isSigner: false, isWritable: false }, // 9: lending_market_authority
382
+ { pubkey: res.reserveLiquiditySupply, isSigner: false, isWritable: true }, // 10: reserve_liquidity_supply
383
+ { pubkey: res.reserveCollateralMint, isSigner: false, isWritable: true }, // 11: reserve_collateral_mint
384
+ { pubkey: reserveWhitelist, isSigner: false, isWritable: false }, // 12: reserve_whitelist_entry (optional)
385
+ { pubkey: exports.KLEND_PROGRAM, isSigner: false, isWritable: false }, // 13: klend_program
386
+ { pubkey: SPL_TOKEN_PROGRAM, isSigner: false, isWritable: false }, // 14: reserve_collateral_token_program
387
+ { pubkey: SPL_TOKEN_PROGRAM, isSigner: false, isWritable: false }, // 15: token_program
388
+ { pubkey: SYSVAR_INSTRUCTIONS, isSigner: false, isWritable: false }, // 16: instruction_sysvar_account
389
+ ];
390
+ // Append ALL reserves for batch refresh, then lending_market at the end.
391
+ // cpi_refresh_reserves uses .take(reserves_count) to get just reserves.
392
+ // The lending_market must be in the transaction but AFTER reserves.
393
+ const allReserves = [];
394
+ for (let ai = 0; ai < 10; ai++) {
395
+ try {
396
+ const a = readVaultAllocation(vaultStateData, ai);
397
+ if (a.reserve.equals(web3_js_1.PublicKey.default))
398
+ break;
399
+ allReserves.push(a.reserve);
400
+ }
401
+ catch {
402
+ break;
403
+ }
404
+ }
405
+ for (const r of allReserves) {
406
+ keys.push({ pubkey: r, isSigner: false, isWritable: true });
407
+ }
408
+ // Lending market after reserves (for CPI resolution, not counted as a reserve)
409
+ keys.push({ pubkey: res.lendingMarket, isSigner: false, isWritable: false });
410
+ return new web3_js_1.TransactionInstruction({
411
+ programId: constants_1.KAMINO_VAULT_PROGRAM,
412
+ keys,
413
+ data: IX_INVEST,
414
+ });
415
+ }
416
+ /**
417
+ * Build Kamino `invest` instructions for all stale kVaults in a lend strategy.
418
+ *
419
+ * Checks each registered protocol for staleness and returns invest instructions
420
+ * for any that are stale.
421
+ *
422
+ * @param connection - Solana connection
423
+ * @param payer - Transaction signer
424
+ * @param baseMint - Base token mint
425
+ * @param protocols - Registered protocol pubkeys from lend strategy state
426
+ */
427
+ async function buildKaminoInvestIxsIfStale(connection, payer, baseMint, protocols) {
428
+ const staleVaults = await findStaleKvaults(connection, protocols);
429
+ if (staleVaults.length === 0)
430
+ return [];
431
+ const TOKEN_PROG = new web3_js_1.PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
432
+ const ATA_PROG = new web3_js_1.PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
433
+ // Payer's base ATA (for crank fee — usually 0)
434
+ const [payerAta] = web3_js_1.PublicKey.findProgramAddressSync([payer.toBuffer(), TOKEN_PROG.toBuffer(), baseMint.toBuffer()], ATA_PROG);
435
+ const ixs = [];
436
+ for (const vaultState of staleVaults) {
437
+ try {
438
+ // Fetch vault_state and its first reserve
439
+ const vaultInfo = await connection.getAccountInfo(vaultState);
440
+ if (!vaultInfo)
441
+ continue;
442
+ const alloc = readVaultAllocation(vaultInfo.data, 0);
443
+ if (alloc.reserve.equals(web3_js_1.PublicKey.default))
444
+ continue;
445
+ const reserveInfo = await connection.getAccountInfo(alloc.reserve);
446
+ if (!reserveInfo)
447
+ continue;
448
+ // Validate reserve is owned by KLend (skip if migrated/closed)
449
+ if (!reserveInfo.owner.equals(exports.KLEND_PROGRAM))
450
+ continue;
451
+ ixs.push(buildKaminoInvestIx(payer, payerAta, vaultState, baseMint, vaultInfo.data, reserveInfo.data, 0));
452
+ }
453
+ catch {
454
+ // Skip vault if any account data is unreadable
455
+ continue;
456
+ }
457
+ }
458
+ return ixs;
459
+ }
460
+ //# sourceMappingURL=kamino-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kamino-vault.js","sourceRoot":"","sources":["../../src/elemental-lend/kamino-vault.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  export declare function findStrategyStatePda(baseMint: PublicKey, programId?: PublicKey): [PublicKey, number];
3
3
  export declare function findStvPositionPda(stv: PublicKey, programId?: PublicKey): [PublicKey, number];
4
+ export declare function findManagerRolePda(strategyState: PublicKey, manager: PublicKey, programId?: PublicKey): [PublicKey, number];
4
5
  //# sourceMappingURL=pda.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../src/elemental-lend/pda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,EACnB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB"}
1
+ {"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../src/elemental-lend/pda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,EACnB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,SAAS,EACxB,OAAO,EAAE,SAAS,EAClB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.findStrategyStatePda = findStrategyStatePda;
4
4
  exports.findStvPositionPda = findStvPositionPda;
5
+ exports.findManagerRolePda = findManagerRolePda;
5
6
  const web3_js_1 = require("@solana/web3.js");
6
7
  const constants_1 = require("./constants");
7
8
  function findStrategyStatePda(baseMint, programId = constants_1.PROGRAM_ID) {
@@ -10,4 +11,7 @@ function findStrategyStatePda(baseMint, programId = constants_1.PROGRAM_ID) {
10
11
  function findStvPositionPda(stv, programId = constants_1.PROGRAM_ID) {
11
12
  return web3_js_1.PublicKey.findProgramAddressSync([constants_1.POSITION_SEED, stv.toBuffer()], programId);
12
13
  }
14
+ function findManagerRolePda(strategyState, manager, programId = constants_1.PROGRAM_ID) {
15
+ return web3_js_1.PublicKey.findProgramAddressSync([constants_1.MANAGER_SEED, strategyState.toBuffer(), manager.toBuffer()], programId);
16
+ }
13
17
  //# sourceMappingURL=pda.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pda.js","sourceRoot":"","sources":["../../src/elemental-lend/pda.ts"],"names":[],"mappings":";;AAGA,oDAQC;AAED,gDAQC;AArBD,6CAA4C;AAC5C,2CAA6E;AAE7E,SAAgB,oBAAoB,CAClC,QAAmB,EACnB,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,+BAAmB,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAC1C,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,GAAc,EACd,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,yBAAa,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,EAC/B,SAAS,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"pda.js","sourceRoot":"","sources":["../../src/elemental-lend/pda.ts"],"names":[],"mappings":";;AAGA,oDAQC;AAED,gDAQC;AAED,gDASC;AAhCD,6CAA4C;AAC5C,2CAA2F;AAE3F,SAAgB,oBAAoB,CAClC,QAAmB,EACnB,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,+BAAmB,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAC1C,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,GAAc,EACd,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,yBAAa,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,EAC/B,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,aAAwB,EACxB,OAAkB,EAClB,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,wBAAY,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,EAC5D,SAAS,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Protocol action transaction builders for Elemental Lend.
3
+ *
4
+ * Builds complete instruction arrays for deposit/withdraw to/from
5
+ * Kamino kVault and Jupiter Lend protocols. Ready to pass to sendSmartTx.
6
+ */
7
+ import { Connection, PublicKey, TransactionInstruction } from "@solana/web3.js";
8
+ /**
9
+ * Minimal connection interface to avoid nominal type mismatches when the
10
+ * consumer has a different version of @solana/web3.js installed.
11
+ */
12
+ export type ProtocolActionConnection = Pick<Connection, "getAccountInfo" | "getMultipleAccountsInfo">;
13
+ import type { JupiterLendPool } from "./jupiter-lend";
14
+ export type ProtocolType = "Kamino kVault" | "Jupiter Lend";
15
+ export type ProtocolAction = "deposit" | "withdraw";
16
+ export interface ProtocolActionArgs {
17
+ connection: ProtocolActionConnection;
18
+ /** Manager wallet (signer) */
19
+ manager: PublicKey;
20
+ /** Lend strategy state PDA (derived from baseMint if not provided) */
21
+ strategyState?: PublicKey;
22
+ /** Protocol address (Kamino vault_state or Jupiter Lend lending account) */
23
+ protocol: PublicKey;
24
+ protocolType: ProtocolType;
25
+ action: ProtocolAction;
26
+ /** Amount in base token units (e.g. USDC lamports) */
27
+ amount: bigint;
28
+ baseMint: PublicKey;
29
+ /** Token program for the base mint (defaults to SPL Token) */
30
+ tokenProgram?: PublicKey;
31
+ /** Jupiter Lend pool config (defaults to USDC_POOL) */
32
+ jupLendPool?: JupiterLendPool;
33
+ /** Elemental Lend program ID (defaults to PROGRAM_ID) */
34
+ programId?: PublicKey;
35
+ }
36
+ /**
37
+ * Build complete instruction array for a protocol deposit or withdraw.
38
+ *
39
+ * Returns instructions including a compute budget instruction (400k CU)
40
+ * and the protocol-specific instruction with all accounts resolved.
41
+ *
42
+ * For Kamino kVault withdraw: reads vault_state on-chain to convert
43
+ * base amount to kvToken shares, and reads KLend reserves for the
44
+ * withdraw accounts.
45
+ *
46
+ * @returns TransactionInstruction[] ready for sendSmartTx
47
+ */
48
+ export declare function buildProtocolActionIxs(args: ProtocolActionArgs): Promise<TransactionInstruction[]>;
49
+ //# sourceMappingURL=protocol-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-actions.d.ts","sourceRoot":"","sources":["../../src/elemental-lend/protocol-actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,UAAU,EACV,SAAS,EACT,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,UAAU,EAClD,gBAAgB,GAChB,yBAAyB,CAC5B,CAAC;AAsBF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAsBtD,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,cAAc,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,wBAAwB,CAAC;IACrC,8BAA8B;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,sEAAsE;IACtE,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,uDAAuD;IACvD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,yDAAyD;IACzD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAmDnC"}