@shogun-sdk/intents-sdk 1.2.5 → 1.2.6-test

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 (121) hide show
  1. package/README.md +3 -19
  2. package/dist/esm/chains.js +3 -0
  3. package/dist/esm/chains.js.map +1 -1
  4. package/dist/esm/constants.js +9 -0
  5. package/dist/esm/constants.js.map +1 -1
  6. package/dist/esm/core/evm/chain-provider.js +2 -1
  7. package/dist/esm/core/evm/chain-provider.js.map +1 -1
  8. package/dist/esm/core/evm/cross-chain-limit-order.js +1 -1
  9. package/dist/esm/core/evm/cross-chain-limit-order.js.map +1 -1
  10. package/dist/esm/core/evm/permit2-signature-transfer.js +15 -0
  11. package/dist/esm/core/evm/permit2-signature-transfer.js.map +1 -0
  12. package/dist/esm/core/evm/single-chain-dca-order.js +1 -1
  13. package/dist/esm/core/evm/single-chain-dca-order.js.map +1 -1
  14. package/dist/esm/core/evm/single-chain-limit-order.js +1 -1
  15. package/dist/esm/core/evm/single-chain-limit-order.js.map +1 -1
  16. package/dist/esm/core/solana/dca/single-chain-dca-order.js +3 -2
  17. package/dist/esm/core/solana/dca/single-chain-dca-order.js.map +1 -1
  18. package/dist/esm/core/solana/dca/single-chain-limit-order.js +3 -2
  19. package/dist/esm/core/solana/dca/single-chain-limit-order.js.map +1 -1
  20. package/dist/esm/core/solana/utils.js +14 -4
  21. package/dist/esm/core/solana/utils.js.map +1 -1
  22. package/dist/esm/core/sui/single-chain-dca-order.js +2 -1
  23. package/dist/esm/core/sui/single-chain-dca-order.js.map +1 -1
  24. package/dist/esm/core/sui/single-chain-limit-order.js +2 -1
  25. package/dist/esm/core/sui/single-chain-limit-order.js.map +1 -1
  26. package/dist/esm/index.js +6 -3
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/types/token-list.js +2 -0
  29. package/dist/esm/types/token-list.js.map +1 -0
  30. package/dist/esm/utils/defillama.js +1 -0
  31. package/dist/esm/utils/defillama.js.map +1 -1
  32. package/dist/esm/utils/quote/aggregator.js +158 -42
  33. package/dist/esm/utils/quote/aggregator.js.map +1 -1
  34. package/dist/esm/utils/quote/paraswap.js +1 -0
  35. package/dist/esm/utils/quote/paraswap.js.map +1 -1
  36. package/dist/esm/utils/quote/pumpfun/estimations.js +169 -0
  37. package/dist/esm/utils/quote/pumpfun/estimations.js.map +1 -0
  38. package/dist/esm/utils/quote/pumpfun/estimations_amm.js +130 -0
  39. package/dist/esm/utils/quote/pumpfun/estimations_amm.js.map +1 -0
  40. package/dist/esm/utils/quote/pumpfun/index.js +198 -0
  41. package/dist/esm/utils/quote/pumpfun/index.js.map +1 -0
  42. package/dist/esm/utils/quote/pumpfun/models.js +70 -0
  43. package/dist/esm/utils/quote/pumpfun/models.js.map +1 -0
  44. package/dist/esm/utils/quote/pumpfun/utils.js +269 -0
  45. package/dist/esm/utils/quote/pumpfun/utils.js.map +1 -0
  46. package/dist/esm/utils/quote/raydium.js +336 -0
  47. package/dist/esm/utils/quote/raydium.js.map +1 -0
  48. package/dist/esm/utils/quote/stablecoins-tokens.js +1 -0
  49. package/dist/esm/utils/quote/stablecoins-tokens.js.map +1 -1
  50. package/dist/esm/utils/quote/utils.js +8 -0
  51. package/dist/esm/utils/quote/utils.js.map +1 -0
  52. package/dist/esm/utils/tokens/index.js +37 -0
  53. package/dist/esm/utils/tokens/index.js.map +1 -0
  54. package/dist/types/chains.d.ts +4 -2
  55. package/dist/types/chains.d.ts.map +1 -1
  56. package/dist/types/constants.d.ts +2 -1
  57. package/dist/types/constants.d.ts.map +1 -1
  58. package/dist/types/core/evm/chain-provider.d.ts.map +1 -1
  59. package/dist/types/core/evm/permit2-signature-transfer.d.ts +3 -0
  60. package/dist/types/core/evm/permit2-signature-transfer.d.ts.map +1 -0
  61. package/dist/types/core/solana/dca/single-chain-dca-order.d.ts +1 -2
  62. package/dist/types/core/solana/dca/single-chain-dca-order.d.ts.map +1 -1
  63. package/dist/types/core/solana/dca/single-chain-limit-order.d.ts +1 -2
  64. package/dist/types/core/solana/dca/single-chain-limit-order.d.ts.map +1 -1
  65. package/dist/types/core/solana/utils.d.ts +2 -0
  66. package/dist/types/core/solana/utils.d.ts.map +1 -1
  67. package/dist/types/core/sui/single-chain-dca-order.d.ts.map +1 -1
  68. package/dist/types/core/sui/single-chain-limit-order.d.ts.map +1 -1
  69. package/dist/types/index.d.ts +5 -3
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/dist/types/types/token-list.d.ts +30 -0
  72. package/dist/types/types/token-list.d.ts.map +1 -0
  73. package/dist/types/utils/defillama.d.ts +1 -0
  74. package/dist/types/utils/defillama.d.ts.map +1 -1
  75. package/dist/types/utils/quote/aggregator.d.ts +42 -5
  76. package/dist/types/utils/quote/aggregator.d.ts.map +1 -1
  77. package/dist/types/utils/quote/paraswap.d.ts.map +1 -1
  78. package/dist/types/utils/quote/pumpfun/estimations.d.ts +30 -0
  79. package/dist/types/utils/quote/pumpfun/estimations.d.ts.map +1 -0
  80. package/dist/types/utils/quote/pumpfun/estimations_amm.d.ts +49 -0
  81. package/dist/types/utils/quote/pumpfun/estimations_amm.d.ts.map +1 -0
  82. package/dist/types/utils/quote/pumpfun/index.d.ts +10 -0
  83. package/dist/types/utils/quote/pumpfun/index.d.ts.map +1 -0
  84. package/dist/types/utils/quote/pumpfun/models.d.ts +94 -0
  85. package/dist/types/utils/quote/pumpfun/models.d.ts.map +1 -0
  86. package/dist/types/utils/quote/pumpfun/utils.d.ts +50 -0
  87. package/dist/types/utils/quote/pumpfun/utils.d.ts.map +1 -0
  88. package/dist/types/utils/quote/raydium.d.ts +98 -0
  89. package/dist/types/utils/quote/raydium.d.ts.map +1 -0
  90. package/dist/types/utils/quote/stablecoins-tokens.d.ts.map +1 -1
  91. package/dist/types/utils/quote/utils.d.ts +5 -0
  92. package/dist/types/utils/quote/utils.d.ts.map +1 -0
  93. package/dist/types/utils/tokens/index.d.ts +20 -0
  94. package/dist/types/utils/tokens/index.d.ts.map +1 -0
  95. package/package.json +20 -18
  96. package/src/chains.ts +3 -0
  97. package/src/constants.ts +12 -2
  98. package/src/core/evm/chain-provider.ts +2 -1
  99. package/src/core/evm/cross-chain-limit-order.ts +1 -1
  100. package/src/core/evm/permit2-signature-transfer.ts +15 -0
  101. package/src/core/evm/single-chain-dca-order.ts +1 -1
  102. package/src/core/evm/single-chain-limit-order.ts +1 -1
  103. package/src/core/solana/dca/single-chain-dca-order.ts +3 -3
  104. package/src/core/solana/dca/single-chain-limit-order.ts +3 -2
  105. package/src/core/solana/utils.ts +24 -12
  106. package/src/core/sui/single-chain-dca-order.ts +2 -2
  107. package/src/core/sui/single-chain-limit-order.ts +2 -2
  108. package/src/index.ts +14 -4
  109. package/src/types/token-list.ts +35 -0
  110. package/src/utils/defillama.ts +1 -0
  111. package/src/utils/quote/aggregator.ts +210 -55
  112. package/src/utils/quote/paraswap.ts +1 -0
  113. package/src/utils/quote/pumpfun/estimations.ts +206 -0
  114. package/src/utils/quote/pumpfun/estimations_amm.ts +165 -0
  115. package/src/utils/quote/pumpfun/index.ts +266 -0
  116. package/src/utils/quote/pumpfun/models.ts +163 -0
  117. package/src/utils/quote/pumpfun/utils.ts +343 -0
  118. package/src/utils/quote/raydium.ts +506 -0
  119. package/src/utils/quote/stablecoins-tokens.ts +1 -0
  120. package/src/utils/quote/utils.ts +8 -0
  121. package/src/utils/tokens/index.ts +38 -0
@@ -0,0 +1,130 @@
1
+ import { BPS_DEN, PreBondedTradeType } from './estimations.js';
2
+ /**
3
+ * Ceiling division for bigints
4
+ * Returns ceil(n / d)
5
+ */
6
+ function ceilDiv(n, d) {
7
+ if (d === 0n) {
8
+ throw new Error('Division by zero');
9
+ }
10
+ return (n + d - 1n) / d;
11
+ }
12
+ /**
13
+ * Calculate output amount for constant product AMM with exact input
14
+ * Formula: dy = (dx_effective * y_out) / (x_in + dx_effective)
15
+ * where dx_effective = dx * BPS_DEN / (BPS_DEN + fee_bps)
16
+ */
17
+ function amountOutExactIn(dx, r) {
18
+ if (dx === 0n) {
19
+ return 0n;
20
+ }
21
+ if (r.xIn === 0n || r.yOut === 0n) {
22
+ throw new Error('Insufficient liquidity: empty reserves');
23
+ }
24
+ const denom = BPS_DEN + r.feeBps;
25
+ const dxEff = (dx * BPS_DEN) / denom;
26
+ const num = dxEff * r.yOut;
27
+ const den = r.xIn + dxEff;
28
+ return num / den; // floor division
29
+ }
30
+ /**
31
+ * Calculate input amount needed for exact output in constant product AMM
32
+ * Formula: dx = ceil(dx_effective * (BPS_DEN + fee_bps) / BPS_DEN)
33
+ * where dx_effective = ceil((x_in * dy) / (y_out - dy))
34
+ */
35
+ function amountInExactOut(dy, r) {
36
+ if (dy === 0n) {
37
+ return 0n;
38
+ }
39
+ if (dy >= r.yOut || r.xIn === 0n) {
40
+ throw new Error('Insufficient liquidity: dy >= reserve or x_in is zero');
41
+ }
42
+ const dxEff = ceilDiv(r.xIn * dy, r.yOut - dy);
43
+ const denom = BPS_DEN + r.feeBps;
44
+ return ceilDiv(dxEff * denom, BPS_DEN);
45
+ }
46
+ /**
47
+ * Calculate base tokens received when buying with exact quote amount
48
+ * @param quoteIn Amount of quote tokens (SOL) to spend
49
+ * @param baseRes Base token reserve
50
+ * @param quoteRes Quote token reserve
51
+ * @param feeBps Fee in basis points
52
+ * @returns Amount of base tokens received
53
+ */
54
+ export function buyBaseExactInQuote(quoteIn, baseRes, quoteRes, feeBps) {
55
+ return amountOutExactIn(quoteIn, {
56
+ xIn: quoteRes,
57
+ yOut: baseRes,
58
+ feeBps,
59
+ });
60
+ }
61
+ /**
62
+ * Calculate quote tokens needed to buy exact base amount
63
+ * @param baseOut Desired amount of base tokens
64
+ * @param baseRes Base token reserve
65
+ * @param quoteRes Quote token reserve
66
+ * @param feeBps Fee in basis points
67
+ * @returns Amount of quote tokens needed
68
+ */
69
+ export function buyBaseExactOutQuote(baseOut, baseRes, quoteRes, feeBps) {
70
+ return amountInExactOut(baseOut, {
71
+ xIn: quoteRes,
72
+ yOut: baseRes,
73
+ feeBps,
74
+ });
75
+ }
76
+ /**
77
+ * Calculate quote tokens received when selling exact base amount
78
+ * @param baseIn Amount of base tokens to sell
79
+ * @param baseRes Base token reserve
80
+ * @param quoteRes Quote token reserve
81
+ * @param feeBps Fee in basis points
82
+ * @returns Amount of quote tokens received
83
+ */
84
+ export function sellBaseExactInQuote(baseIn, baseRes, quoteRes, feeBps) {
85
+ return amountOutExactIn(baseIn, {
86
+ xIn: baseRes,
87
+ yOut: quoteRes,
88
+ feeBps,
89
+ });
90
+ }
91
+ /**
92
+ * Calculate base tokens needed to receive exact quote amount
93
+ * @param quoteOut Desired amount of quote tokens
94
+ * @param baseRes Base token reserve
95
+ * @param quoteRes Quote token reserve
96
+ * @param feeBps Fee in basis points
97
+ * @returns Amount of base tokens needed
98
+ */
99
+ export function sellBaseExactOutQuote(quoteOut, baseRes, quoteRes, feeBps) {
100
+ return amountInExactOut(quoteOut, {
101
+ xIn: baseRes,
102
+ yOut: quoteRes,
103
+ feeBps,
104
+ });
105
+ }
106
+ /**
107
+ * Main estimation function for PumpFun AMM
108
+ * @param baseToken Base token account info
109
+ * @param quoteToken Quote token account info
110
+ * @param globalConfig Global configuration with fee settings
111
+ * @param amount Amount to trade
112
+ * @param tradeType Type of trade (BuyExactIn, BuyExactOut, SellExactIn, SellExactOut)
113
+ * @returns Estimated output/input amount
114
+ */
115
+ export function estimatePumpFunAmm(baseToken, quoteToken, globalConfig, amount, tradeType) {
116
+ const totalFeeBps = globalConfig.lpFeeBasisPoints + globalConfig.protocolFeeBasisPoints + globalConfig.coinCreatorFeeBasisPoints;
117
+ switch (tradeType) {
118
+ case PreBondedTradeType.BuyExactIn:
119
+ return buyBaseExactInQuote(amount, baseToken.amount, quoteToken.amount, totalFeeBps);
120
+ case PreBondedTradeType.BuyExactOut:
121
+ return buyBaseExactOutQuote(amount, baseToken.amount, quoteToken.amount, totalFeeBps);
122
+ case PreBondedTradeType.SellExactIn:
123
+ return sellBaseExactInQuote(amount, baseToken.amount, quoteToken.amount, totalFeeBps);
124
+ case PreBondedTradeType.SellExactOut:
125
+ return sellBaseExactOutQuote(amount, baseToken.amount, quoteToken.amount, totalFeeBps);
126
+ default:
127
+ throw new Error(`Invalid trade type: ${tradeType}`);
128
+ }
129
+ }
130
+ //# sourceMappingURL=estimations_amm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimations_amm.js","sourceRoot":"","sources":["../../../../../src/utils/quote/pumpfun/estimations_amm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import { address } from '@solana/kit';
2
+ import {} from '../aggregator.js';
3
+ import { getPumpFunGlobalAccount, getPumpFunBondingCurve, getPumpFunGlobalConfig, getPumpFunMigratedPool, getPoolTokensInfo, } from './utils.js';
4
+ import { NATIVE_SOLANA_TOKEN_ADDRESS, WRAPPED_SOL_MINT_ADDRESS } from '../../../constants.js';
5
+ import { JupiterQuoteProvider } from '../jupiter.js';
6
+ import { estimatePumpFunPrebonded, PreBondedTradeType } from './estimations.js';
7
+ import { estimatePumpFunAmm } from './estimations_amm.js';
8
+ import { applySlippage } from '../utils.js';
9
+ export class PumpFunQuoteProvider {
10
+ async getQuote(raydiumParams) {
11
+ // Check which token is pump and if it is in prebonding stage
12
+ const inputMint = address(raydiumParams.inputMint);
13
+ const outputMint = address(raydiumParams.outputMint);
14
+ const [inputBondingCurve, outputBondingCurve] = await this.getTokensBondingCurve(inputMint, outputMint);
15
+ const { bondingCurve, isInputPrebonded } = this.ensureSinglePrebondedToken(inputBondingCurve, outputBondingCurve);
16
+ let isInputSol = inputMint === NATIVE_SOLANA_TOKEN_ADDRESS || inputMint === WRAPPED_SOL_MINT_ADDRESS;
17
+ let isOutputSol = outputMint === NATIVE_SOLANA_TOKEN_ADDRESS || outputMint === WRAPPED_SOL_MINT_ADDRESS;
18
+ if (bondingCurve.complete) {
19
+ console.log('Bonding curve is complete, using Pump AMM for quote');
20
+ // We have to estimate prebonded first and then swap from quote token to output token (if needed)
21
+ // Use Pump AMM logic to get quote
22
+ let [globalConfig, _] = await getPumpFunGlobalConfig();
23
+ if (isInputPrebonded) {
24
+ let [migratePoolData, _] = await getPumpFunMigratedPool(inputMint);
25
+ let [inputTokenAccount, outputTokenAccount] = await getPoolTokensInfo(migratePoolData.poolBaseTokenAccount, migratePoolData.poolQuoteTokenAccount);
26
+ let pumpAmountOut = estimatePumpFunAmm(inputTokenAccount, outputTokenAccount, globalConfig, BigInt(raydiumParams.amount), PreBondedTradeType.SellExactIn);
27
+ // Then if output token is SOL or WSOL, return directly
28
+ if (isOutputSol) {
29
+ // Apply slippage to amountOut
30
+ const pumpMinAmountOut = applySlippage(pumpAmountOut, raydiumParams.slippageBps);
31
+ return {
32
+ amountIn: BigInt(raydiumParams.amount),
33
+ amountOut: pumpAmountOut,
34
+ amountOutMin: pumpMinAmountOut,
35
+ slippage: raydiumParams.slippageBps / 100, // convert to percentage
36
+ };
37
+ }
38
+ else {
39
+ // Then if output token is not SOL or WSOL, get a jupiter quote to swap SOL to output token
40
+ let jupiterQuoteRequest = {
41
+ amount: pumpAmountOut,
42
+ tokenIn: WRAPPED_SOL_MINT_ADDRESS.toString(),
43
+ tokenOut: raydiumParams.outputMint,
44
+ swapMode: 'ExactIn',
45
+ slippageBps: raydiumParams.slippageBps, // Here we use all slippage to simplify
46
+ };
47
+ const jupiterQuoter = new JupiterQuoteProvider();
48
+ const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);
49
+ if (!jupiterQuote.quote) {
50
+ throw new Error('Jupiter quote failed');
51
+ }
52
+ return {
53
+ amountIn: BigInt(raydiumParams.amount),
54
+ amountOut: BigInt(jupiterQuote.quote.outAmount),
55
+ amountOutMin: BigInt(jupiterQuote.quote.otherAmountThreshold),
56
+ slippage: raydiumParams.slippageBps / 100, // convert to percentage
57
+ };
58
+ }
59
+ }
60
+ else {
61
+ let [migratePoolData, _] = await getPumpFunMigratedPool(outputMint);
62
+ let [inputTokenAccount, outputTokenAccount] = await getPoolTokensInfo(migratePoolData.poolBaseTokenAccount, migratePoolData.poolQuoteTokenAccount);
63
+ let amountOutFromInput = BigInt(raydiumParams.amount);
64
+ let amountOutFromInputMin = applySlippage(BigInt(raydiumParams.amount), raydiumParams.slippageBps);
65
+ // Buying prebonded token with SOL
66
+ // If input token is not SOL or WSOL, get a jupiter quote to swap input token to SOL first
67
+ if (!isInputSol) {
68
+ let jupiterQuoteRequest = {
69
+ amount: BigInt(raydiumParams.amount),
70
+ tokenIn: raydiumParams.inputMint,
71
+ tokenOut: WRAPPED_SOL_MINT_ADDRESS.toString(),
72
+ swapMode: 'ExactIn',
73
+ slippageBps: raydiumParams.slippageBps, // Use all slippage to simplify
74
+ };
75
+ const jupiterQuoter = new JupiterQuoteProvider();
76
+ const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);
77
+ if (!jupiterQuote.quote) {
78
+ throw new Error('Jupiter quote failed');
79
+ }
80
+ amountOutFromInput = BigInt(jupiterQuote.quote.outAmount);
81
+ amountOutFromInputMin = BigInt(jupiterQuote.quote.otherAmountThreshold);
82
+ }
83
+ // Slippage is already applied to amountOutFromInputMin
84
+ let pumpAmountOut = estimatePumpFunAmm(inputTokenAccount, outputTokenAccount, globalConfig, amountOutFromInput, PreBondedTradeType.BuyExactIn);
85
+ let pumpAmountOutMin = estimatePumpFunAmm(inputTokenAccount, outputTokenAccount, globalConfig, amountOutFromInputMin, PreBondedTradeType.BuyExactIn);
86
+ return {
87
+ amountIn: BigInt(raydiumParams.amount),
88
+ amountOut: pumpAmountOut,
89
+ amountOutMin: pumpAmountOutMin,
90
+ slippage: raydiumParams.slippageBps / 100, // convert to percentage
91
+ };
92
+ }
93
+ }
94
+ else {
95
+ // Use Pump logic to get quote during prebonding
96
+ let globalAccount = await getPumpFunGlobalAccount();
97
+ if (isInputPrebonded) {
98
+ // Selling prebonded token for SOL
99
+ // First get sell estimation from PumpFun
100
+ const pumpAmountOut = estimatePumpFunPrebonded(bondingCurve, globalAccount[0], BigInt(raydiumParams.amount), PreBondedTradeType.SellExactIn);
101
+ console.log('pumpAmountOut', pumpAmountOut);
102
+ // Then if output token is SOL or WSOL, return directly
103
+ if (isOutputSol) {
104
+ // Apply slippage to amountOut
105
+ const pumpMinAmountOut = applySlippage(pumpAmountOut, raydiumParams.slippageBps);
106
+ return {
107
+ amountIn: BigInt(raydiumParams.amount),
108
+ amountOut: pumpAmountOut,
109
+ amountOutMin: pumpMinAmountOut,
110
+ slippage: raydiumParams.slippageBps / 100, // convert to percentage
111
+ };
112
+ }
113
+ else {
114
+ // Then if output token is not SOL or WSOL, get a jupiter quote to swap SOL to output token
115
+ let jupiterQuoteRequest = {
116
+ amount: pumpAmountOut,
117
+ tokenIn: WRAPPED_SOL_MINT_ADDRESS.toString(),
118
+ tokenOut: raydiumParams.outputMint,
119
+ swapMode: 'ExactIn',
120
+ slippageBps: raydiumParams.slippageBps, // Here we use all slippage to simplify
121
+ };
122
+ const jupiterQuoter = new JupiterQuoteProvider();
123
+ const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);
124
+ if (!jupiterQuote.quote) {
125
+ throw new Error('Jupiter quote failed');
126
+ }
127
+ return {
128
+ amountIn: BigInt(raydiumParams.amount),
129
+ amountOut: BigInt(jupiterQuote.quote.outAmount),
130
+ amountOutMin: BigInt(jupiterQuote.quote.otherAmountThreshold),
131
+ slippage: raydiumParams.slippageBps / 100, // convert to percentage
132
+ };
133
+ }
134
+ }
135
+ else {
136
+ let amountOutFromInput = BigInt(raydiumParams.amount);
137
+ let amountOutFromInputMin = applySlippage(BigInt(raydiumParams.amount), raydiumParams.slippageBps);
138
+ // Buying prebonded token with SOL
139
+ // If input token is not SOL or WSOL, get a jupiter quote to swap input token to SOL first
140
+ if (!isInputSol) {
141
+ let jupiterQuoteRequest = {
142
+ amount: BigInt(raydiumParams.amount),
143
+ tokenIn: raydiumParams.inputMint,
144
+ tokenOut: WRAPPED_SOL_MINT_ADDRESS.toString(),
145
+ swapMode: 'ExactIn',
146
+ slippageBps: raydiumParams.slippageBps, // Use all slippage to simplify
147
+ };
148
+ const jupiterQuoter = new JupiterQuoteProvider();
149
+ const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);
150
+ if (!jupiterQuote.quote) {
151
+ throw new Error('Jupiter quote failed');
152
+ }
153
+ // Calculate minimum amount with slippage applied
154
+ amountOutFromInput = BigInt(jupiterQuote.quote.outAmount);
155
+ amountOutFromInputMin = BigInt(jupiterQuote.quote.otherAmountThreshold);
156
+ }
157
+ // Slippage is already applied to amountOutFromInputMin
158
+ const amountOut = estimatePumpFunPrebonded(bondingCurve, globalAccount[0], amountOutFromInput, PreBondedTradeType.BuyExactIn);
159
+ const minAmountOut = estimatePumpFunPrebonded(bondingCurve, globalAccount[0], amountOutFromInputMin, PreBondedTradeType.BuyExactIn);
160
+ return {
161
+ amountIn: BigInt(raydiumParams.amount),
162
+ amountOut: amountOut,
163
+ amountOutMin: minAmountOut,
164
+ slippage: raydiumParams.slippageBps / 100, // convert to percentage
165
+ };
166
+ }
167
+ }
168
+ }
169
+ async getTokensBondingCurve(inputMint, outputMint) {
170
+ let inputBondingCurve = null;
171
+ let outputBondingCurve = null;
172
+ try {
173
+ inputBondingCurve = (await getPumpFunBondingCurve(inputMint))[0];
174
+ }
175
+ catch (e) {
176
+ // No bonding curve for input token
177
+ }
178
+ try {
179
+ outputBondingCurve = (await getPumpFunBondingCurve(outputMint))[0];
180
+ }
181
+ catch (e) {
182
+ // No bonding curve for output token
183
+ }
184
+ return [inputBondingCurve, outputBondingCurve];
185
+ }
186
+ ensureSinglePrebondedToken(inputBonding, outputBonding) {
187
+ if (inputBonding && outputBonding) {
188
+ throw new Error('Both input and output tokens are prebonded, which is not supported');
189
+ }
190
+ if (!inputBonding && !outputBonding) {
191
+ throw new Error('Neither input nor output token is prebonded, which is not supported');
192
+ }
193
+ return inputBonding
194
+ ? { bondingCurve: inputBonding, isInputPrebonded: true }
195
+ : { bondingCurve: outputBonding, isInputPrebonded: false };
196
+ }
197
+ }
198
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/utils/quote/pumpfun/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,aAAa,CAAC;AACpD,OAAO,EAAoB,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAA2B,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,oBAAoB;IACxB,KAAK,CAAC,QAAQ,CAAC,aAAqC;QACzD,6DAA6D;QAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAErD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAExG,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAElH,IAAI,UAAU,GAAG,SAAS,KAAK,2BAA2B,IAAI,SAAS,KAAK,wBAAwB,CAAC;QACrG,IAAI,WAAW,GAAG,UAAU,KAAK,2BAA2B,IAAI,UAAU,KAAK,wBAAwB,CAAC;QAExG,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACnE,iGAAiG;YACjG,kCAAkC;YAClC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAEvD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;gBACnE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,GAAG,MAAM,iBAAiB,CACnE,eAAe,CAAC,oBAAoB,EACpC,eAAe,CAAC,qBAAqB,CACtC,CAAC;gBAEF,IAAI,aAAa,GAAG,kBAAkB,CACpC,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAC5B,kBAAkB,CAAC,WAAW,CAC/B,CAAC;gBAEF,uDAAuD;gBACvD,IAAI,WAAW,EAAE,CAAC;oBAChB,8BAA8B;oBAC9B,MAAM,gBAAgB,GAAG,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;oBACjF,OAAO;wBACL,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;wBACtC,SAAS,EAAE,aAAa;wBACxB,YAAY,EAAE,gBAAgB;wBAC9B,QAAQ,EAAE,aAAa,CAAC,WAAW,GAAG,GAAG,EAAE,wBAAwB;qBACpE,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,2FAA2F;oBAC3F,IAAI,mBAAmB,GAAuB;wBAC5C,MAAM,EAAE,aAAa;wBACrB,OAAO,EAAE,wBAAwB,CAAC,QAAQ,EAAE;wBAC5C,QAAQ,EAAE,aAAa,CAAC,UAAU;wBAClC,QAAQ,EAAE,SAAS;wBACnB,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,uCAAuC;qBAChF,CAAC;oBAEF,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;oBACjD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;oBACvE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;wBACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAC1C,CAAC;oBAED,OAAO;wBACL,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;wBACtC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;wBAC/C,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC;wBAC7D,QAAQ,EAAE,aAAa,CAAC,WAAW,GAAG,GAAG,EAAE,wBAAwB;qBACpE,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAC;gBACpE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,GAAG,MAAM,iBAAiB,CACnE,eAAe,CAAC,oBAAoB,EACpC,eAAe,CAAC,qBAAqB,CACtC,CAAC;gBACF,IAAI,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAI,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;gBACnG,kCAAkC;gBAClC,0FAA0F;gBAC1F,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,IAAI,mBAAmB,GAAuB;wBAC5C,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;wBACpC,OAAO,EAAE,aAAa,CAAC,SAAS;wBAChC,QAAQ,EAAE,wBAAwB,CAAC,QAAQ,EAAE;wBAC7C,QAAQ,EAAE,SAAS;wBACnB,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,+BAA+B;qBACxE,CAAC;oBACF,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;oBACjD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;oBACvE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;wBACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAC1C,CAAC;oBACD,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC1D,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC1E,CAAC;gBAED,uDAAuD;gBACvD,IAAI,aAAa,GAAG,kBAAkB,CACpC,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,CAAC,UAAU,CAC9B,CAAC;gBAEF,IAAI,gBAAgB,GAAG,kBAAkB,CACvC,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,CAAC,UAAU,CAC9B,CAAC;gBACF,OAAO;oBACL,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;oBACtC,SAAS,EAAE,aAAa;oBACxB,YAAY,EAAE,gBAAgB;oBAC9B,QAAQ,EAAE,aAAa,CAAC,WAAW,GAAG,GAAG,EAAE,wBAAwB;iBACpE,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gDAAgD;YAChD,IAAI,aAAa,GAAG,MAAM,uBAAuB,EAAE,CAAC;YACpD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,kCAAkC;gBAClC,yCAAyC;gBACzC,MAAM,aAAa,GAAG,wBAAwB,CAC5C,YAAY,EACZ,aAAa,CAAC,CAAC,CAAC,EAChB,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAC5B,kBAAkB,CAAC,WAAW,CAC/B,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBAE5C,uDAAuD;gBACvD,IAAI,WAAW,EAAE,CAAC;oBAChB,8BAA8B;oBAC9B,MAAM,gBAAgB,GAAG,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;oBACjF,OAAO;wBACL,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;wBACtC,SAAS,EAAE,aAAa;wBACxB,YAAY,EAAE,gBAAgB;wBAC9B,QAAQ,EAAE,aAAa,CAAC,WAAW,GAAG,GAAG,EAAE,wBAAwB;qBACpE,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,2FAA2F;oBAC3F,IAAI,mBAAmB,GAAuB;wBAC5C,MAAM,EAAE,aAAa;wBACrB,OAAO,EAAE,wBAAwB,CAAC,QAAQ,EAAE;wBAC5C,QAAQ,EAAE,aAAa,CAAC,UAAU;wBAClC,QAAQ,EAAE,SAAS;wBACnB,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,uCAAuC;qBAChF,CAAC;oBACF,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;oBACjD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;oBACvE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;wBACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAC1C,CAAC;oBAED,OAAO;wBACL,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;wBACtC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;wBAC/C,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC;wBAC7D,QAAQ,EAAE,aAAa,CAAC,WAAW,GAAG,GAAG,EAAE,wBAAwB;qBACpE,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAI,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;gBACnG,kCAAkC;gBAClC,0FAA0F;gBAC1F,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,IAAI,mBAAmB,GAAuB;wBAC5C,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;wBACpC,OAAO,EAAE,aAAa,CAAC,SAAS;wBAChC,QAAQ,EAAE,wBAAwB,CAAC,QAAQ,EAAE;wBAC7C,QAAQ,EAAE,SAAS;wBACnB,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,+BAA+B;qBACxE,CAAC;oBACF,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;oBACjD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;oBACvE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;wBACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAC1C,CAAC;oBAED,iDAAiD;oBACjD,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC1D,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC1E,CAAC;gBAED,uDAAuD;gBACvD,MAAM,SAAS,GAAG,wBAAwB,CACxC,YAAY,EACZ,aAAa,CAAC,CAAC,CAAC,EAChB,kBAAkB,EAClB,kBAAkB,CAAC,UAAU,CAC9B,CAAC;gBAEF,MAAM,YAAY,GAAG,wBAAwB,CAC3C,YAAY,EACZ,aAAa,CAAC,CAAC,CAAC,EAChB,qBAAqB,EACrB,kBAAkB,CAAC,UAAU,CAC9B,CAAC;gBAEF,OAAO;oBACL,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;oBACtC,SAAS,EAAE,SAAS;oBACpB,YAAY,EAAE,YAAY;oBAC1B,QAAQ,EAAE,aAAa,CAAC,WAAW,GAAG,GAAG,EAAE,wBAAwB;iBACpE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,SAAkB,EAClB,UAAmB;QAEnB,IAAI,iBAAiB,GAAwB,IAAI,CAAC;QAClD,IAAI,kBAAkB,GAAwB,IAAI,CAAC;QAEnD,IAAI,CAAC;YACH,iBAAiB,GAAG,CAAC,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,mCAAmC;QACrC,CAAC;QAED,IAAI,CAAC;YACH,kBAAkB,GAAG,CAAC,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,oCAAoC;QACtC,CAAC;QAED,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAEO,0BAA0B,CAChC,YAAiC,EACjC,aAAkC;QAElC,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,YAAY;YACjB,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,IAAI,EAAE;YACxD,CAAC,CAAC,EAAE,YAAY,EAAE,aAAc,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;CACF"}
@@ -0,0 +1,70 @@
1
+ import { getAddressDecoder, getArrayDecoder, getBooleanDecoder, getStructDecoder, getU16Decoder, getU64Decoder, getU8Decoder, } from '@solana/kit';
2
+ /**
3
+ * Creates a decoder for PumpPoolData
4
+ */
5
+ export function getPumpPoolDataDecoder() {
6
+ return getStructDecoder([
7
+ ['poolBump', getU8Decoder()],
8
+ ['index', getU16Decoder()],
9
+ ['creator', getAddressDecoder()],
10
+ ['baseMint', getAddressDecoder()],
11
+ ['quoteMint', getAddressDecoder()],
12
+ ['lpMint', getAddressDecoder()],
13
+ ['poolBaseTokenAccount', getAddressDecoder()],
14
+ ['poolQuoteTokenAccount', getAddressDecoder()],
15
+ ['lpSupply', getU64Decoder()],
16
+ ['coinCreator', getAddressDecoder()],
17
+ ]);
18
+ }
19
+ /**
20
+ * Creates a decoder for the BondingCurve account structure
21
+ * The layout must match exactly the Rust struct serialization order
22
+ */
23
+ export function getBondingCurveDecoder() {
24
+ return getStructDecoder([
25
+ ['virtualTokenReserves', getU64Decoder()],
26
+ ['virtualSolReserves', getU64Decoder()],
27
+ ['realTokenReserves', getU64Decoder()],
28
+ ['realSolReserves', getU64Decoder()],
29
+ ['tokenTotalSupply', getU64Decoder()],
30
+ ['complete', getBooleanDecoder()],
31
+ ['creator', getAddressDecoder()],
32
+ ]);
33
+ }
34
+ /**
35
+ * Creates a decoder for the GlobalAccount structure
36
+ */
37
+ export function getGlobalAccountDecoder() {
38
+ return getStructDecoder([
39
+ ['initialized', getBooleanDecoder()],
40
+ ['authority', getAddressDecoder()],
41
+ ['feeRecipient', getAddressDecoder()],
42
+ ['initialVirtualTokenReserves', getU64Decoder()],
43
+ ['initialVirtualSolReserves', getU64Decoder()],
44
+ ['initialRealTokenReserves', getU64Decoder()],
45
+ ['tokenTotalSupply', getU64Decoder()],
46
+ ['feeBasisPoints', getU64Decoder()],
47
+ ['withdrawAuthority', getAddressDecoder()],
48
+ ['enableMigrate', getBooleanDecoder()],
49
+ ['poolMigrationFee', getU64Decoder()],
50
+ ['creatorFeeBasisPoints', getU64Decoder()],
51
+ ['feeRecipients', getArrayDecoder(getAddressDecoder(), { size: 7 })], // Fixed array of 7 Pubkeys
52
+ ['setCreatorAuthority', getAddressDecoder()],
53
+ ['adminSetCreatorAuthority', getAddressDecoder()],
54
+ ]);
55
+ }
56
+ /**
57
+ * Creates a decoder for the GlobalConfig structure
58
+ */
59
+ export function getGlobalConfigDecoder() {
60
+ return getStructDecoder([
61
+ ['admin', getAddressDecoder()],
62
+ ['lpFeeBasisPoints', getU64Decoder()],
63
+ ['protocolFeeBasisPoints', getU64Decoder()],
64
+ ['disableFlags', getU8Decoder()],
65
+ ['protocolFeeRecipients', getArrayDecoder(getAddressDecoder(), { size: 8 })], // Fixed array of 8 Pubkeys
66
+ ['coinCreatorFeeBasisPoints', getU64Decoder()],
67
+ ['adminSetCoinCreatorAuthority', getAddressDecoder()],
68
+ ]);
69
+ }
70
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../../src/utils/quote/pumpfun/models.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,YAAY,GAGb,MAAM,aAAa,CAAC;AAkFrB;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,gBAAgB,CAAC;QACtB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC;QAC5B,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC;QAC1B,CAAC,SAAS,EAAE,iBAAiB,EAAE,CAAC;QAChC,CAAC,UAAU,EAAE,iBAAiB,EAAE,CAAC;QACjC,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAC;QAClC,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;QAC/B,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;QAC7C,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;QAC9C,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC;QAC7B,CAAC,aAAa,EAAE,iBAAiB,EAAE,CAAC;KACrC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,gBAAgB,CAAC;QACtB,CAAC,sBAAsB,EAAE,aAAa,EAAE,CAAC;QACzC,CAAC,oBAAoB,EAAE,aAAa,EAAE,CAAC;QACvC,CAAC,mBAAmB,EAAE,aAAa,EAAE,CAAC;QACtC,CAAC,iBAAiB,EAAE,aAAa,EAAE,CAAC;QACpC,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;QACrC,CAAC,UAAU,EAAE,iBAAiB,EAAE,CAAC;QACjC,CAAC,SAAS,EAAE,iBAAiB,EAAE,CAAC;KACjC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,gBAAgB,CAAC;QACtB,CAAC,aAAa,EAAE,iBAAiB,EAAE,CAAC;QACpC,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAC;QAClC,CAAC,cAAc,EAAE,iBAAiB,EAAE,CAAC;QACrC,CAAC,6BAA6B,EAAE,aAAa,EAAE,CAAC;QAChD,CAAC,2BAA2B,EAAE,aAAa,EAAE,CAAC;QAC9C,CAAC,0BAA0B,EAAE,aAAa,EAAE,CAAC;QAC7C,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;QACrC,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAC;QACnC,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;QAC1C,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;QACtC,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;QACrC,CAAC,uBAAuB,EAAE,aAAa,EAAE,CAAC;QAC1C,CAAC,eAAe,EAAE,eAAe,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,2BAA2B;QACjG,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,CAAC;QAC5C,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,CAAC;KAClD,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,gBAAgB,CAAC;QACtB,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC9B,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;QACrC,CAAC,wBAAwB,EAAE,aAAa,EAAE,CAAC;QAC3C,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC;QAChC,CAAC,uBAAuB,EAAE,eAAe,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,2BAA2B;QACzG,CAAC,2BAA2B,EAAE,aAAa,EAAE,CAAC;QAC9C,CAAC,8BAA8B,EAAE,iBAAiB,EAAE,CAAC;KACtD,CAAC,CAAC;AACL,CAAC"}