@kaspacom/swap-sdk 1.0.5 → 1.0.8

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 (62) hide show
  1. package/dist/{controllers → cjs/controllers}/swap-sdk.controller.d.ts +1 -0
  2. package/dist/cjs/controllers/swap-sdk.controller.d.ts.map +1 -0
  3. package/dist/cjs/controllers/swap-sdk.controller.js +181 -0
  4. package/dist/cjs/controllers/swap-sdk.controller.js.map +1 -0
  5. package/dist/cjs/index.cjs +53 -0
  6. package/dist/cjs/index.d.ts.map +1 -0
  7. package/dist/cjs/index.js.map +1 -0
  8. package/dist/{services → cjs/services}/swap.service.d.ts +7 -1
  9. package/dist/cjs/services/swap.service.d.ts.map +1 -0
  10. package/dist/cjs/services/swap.service.js +568 -0
  11. package/dist/cjs/services/swap.service.js.map +1 -0
  12. package/dist/cjs/services/wallet.service.d.ts.map +1 -0
  13. package/dist/cjs/services/wallet.service.js +144 -0
  14. package/dist/cjs/services/wallet.service.js.map +1 -0
  15. package/dist/cjs/types/index.d.ts.map +1 -0
  16. package/dist/cjs/types/index.js +10 -0
  17. package/dist/cjs/types/index.js.map +1 -0
  18. package/dist/cjs/types/networks.d.ts.map +1 -0
  19. package/dist/cjs/types/networks.js +23 -0
  20. package/dist/cjs/types/networks.js.map +1 -0
  21. package/dist/esm/controllers/swap-sdk.controller.d.ts +27 -0
  22. package/dist/esm/controllers/swap-sdk.controller.d.ts.map +1 -0
  23. package/dist/{controllers → esm/controllers}/swap-sdk.controller.js +8 -0
  24. package/dist/esm/controllers/swap-sdk.controller.js.map +1 -0
  25. package/dist/esm/index.d.ts +15 -0
  26. package/dist/esm/index.d.ts.map +1 -0
  27. package/dist/esm/index.js.map +1 -0
  28. package/dist/esm/services/swap.service.d.ts +109 -0
  29. package/dist/esm/services/swap.service.d.ts.map +1 -0
  30. package/dist/{services → esm/services}/swap.service.js +17 -3
  31. package/dist/esm/services/swap.service.js.map +1 -0
  32. package/dist/esm/services/wallet.service.d.ts +21 -0
  33. package/dist/esm/services/wallet.service.d.ts.map +1 -0
  34. package/dist/esm/services/wallet.service.js.map +1 -0
  35. package/dist/esm/types/index.d.ts +71 -0
  36. package/dist/esm/types/index.d.ts.map +1 -0
  37. package/dist/esm/types/index.js.map +1 -0
  38. package/dist/esm/types/networks.d.ts +14 -0
  39. package/dist/esm/types/networks.d.ts.map +1 -0
  40. package/dist/esm/types/networks.js.map +1 -0
  41. package/package.json +14 -6
  42. package/dist/controllers/swap-sdk.controller.d.ts.map +0 -1
  43. package/dist/controllers/swap-sdk.controller.js.map +0 -1
  44. package/dist/index.d.ts.map +0 -1
  45. package/dist/index.js.map +0 -1
  46. package/dist/services/swap.service.d.ts.map +0 -1
  47. package/dist/services/swap.service.js.map +0 -1
  48. package/dist/services/wallet.service.d.ts.map +0 -1
  49. package/dist/services/wallet.service.js.map +0 -1
  50. package/dist/swap-sdk.js +0 -33099
  51. package/dist/types/index.d.ts.map +0 -1
  52. package/dist/types/index.js.map +0 -1
  53. package/dist/types/networks.d.ts.map +0 -1
  54. package/dist/types/networks.js.map +0 -1
  55. /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  56. /package/dist/{services → cjs/services}/wallet.service.d.ts +0 -0
  57. /package/dist/{types → cjs/types}/index.d.ts +0 -0
  58. /package/dist/{types → cjs/types}/networks.d.ts +0 -0
  59. /package/dist/{index.js → esm/index.js} +0 -0
  60. /package/dist/{services → esm/services}/wallet.service.js +0 -0
  61. /package/dist/{types → esm/types}/index.js +0 -0
  62. /package/dist/{types → esm/types}/networks.js +0 -0
@@ -0,0 +1,568 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SwapService = exports.PARTNER_FEE_BPS_DIVISOR = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const sdk_core_1 = require("@uniswap/sdk-core");
6
+ const v2_sdk_1 = require("@uniswap/v2-sdk");
7
+ exports.PARTNER_FEE_BPS_DIVISOR = 10000n;
8
+ class SwapService {
9
+ constructor(provider, config, swapOptions) {
10
+ this.config = config;
11
+ this.swapOptions = swapOptions;
12
+ this.signer = null;
13
+ this.pairs = [];
14
+ this.resolvePairsLoaded = null;
15
+ this.resolvePartnerFeeLoaded = null;
16
+ this.partnerFee = 0n;
17
+ this.isFeeActive = false;
18
+ this.provider = provider;
19
+ this.wethAddress = config.wethAddress;
20
+ this.chainId = config.chainId;
21
+ // Router ABI for swap functions
22
+ const routerAbi = [
23
+ // Swaps (ERC20 <-> ERC20)
24
+ 'function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)',
25
+ 'function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)',
26
+ // Swaps (ETH <-> ERC20)
27
+ 'function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)',
28
+ 'function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)',
29
+ 'function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)',
30
+ 'function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)',
31
+ // Get Amounts
32
+ 'function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts)',
33
+ 'function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut)',
34
+ 'function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn)',
35
+ 'function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts)',
36
+ // Get WETH
37
+ 'function WETH() external pure returns (address)'
38
+ ];
39
+ // Factory ABI for pair operations
40
+ const factoryAbi = [
41
+ 'function getPair(address tokenA, address tokenB) external view returns (address pair)',
42
+ 'function allPairs(uint) external view returns (address pair)',
43
+ 'function allPairsLength() external view returns (uint)'
44
+ ];
45
+ const proxyAbi = [
46
+ ...routerAbi,
47
+ 'function partnerFee(bytes32) external view returns (address feeRecipient, uint16 feeBps)',
48
+ 'function feeEnabled() external view returns (bool)',
49
+ ];
50
+ this.routerContract = new ethers_1.Contract(config.routerAddress, routerAbi, provider);
51
+ this.factoryContract = new ethers_1.Contract(config.factoryAddress, factoryAbi, provider);
52
+ if (config.proxyAddress) {
53
+ this.proxyContract = new ethers_1.Contract(config.proxyAddress, proxyAbi, provider);
54
+ }
55
+ this.pairsLoadedPromise = new Promise((resolve) => {
56
+ this.resolvePairsLoaded = resolve;
57
+ });
58
+ this.partnerFeeLoadedPromise = new Promise((resolve) => {
59
+ this.resolvePartnerFeeLoaded = resolve;
60
+ });
61
+ this.loadAllPairsFromGraph();
62
+ this.loadPartnerFee();
63
+ }
64
+ // parnter fee is BPS_DIVISOR = 10_000n;
65
+ async loadPartnerFee() {
66
+ if (!this.resolvePairsLoaded) {
67
+ return this.partnerFee;
68
+ }
69
+ if (this.swapOptions.partnerKey) {
70
+ const [, fee] = await this.proxyContract?.partnerFee(this.swapOptions.partnerKey);
71
+ this.partnerFee = fee;
72
+ }
73
+ this.partnerFee = 100n; // Currently taking all, when new proxy will arrive we will need to delete this
74
+ const isFeeActive = await this.proxyContract?.feeEnabled();
75
+ this.isFeeActive = isFeeActive;
76
+ if (this.resolvePartnerFeeLoaded) {
77
+ this.resolvePartnerFeeLoaded();
78
+ this.resolvePartnerFeeLoaded = null;
79
+ }
80
+ return this.partnerFee;
81
+ }
82
+ setSigner(signer) {
83
+ this.signer = signer;
84
+ // Connect the signer to the router contract for transaction execution
85
+ this.routerContract = this.routerContract.connect(signer);
86
+ if (this.proxyContract) {
87
+ this.proxyContract = this.proxyContract.connect(signer);
88
+ }
89
+ }
90
+ /**
91
+ * Rounds a number string to the specified number of decimal places
92
+ * to avoid parseUnits errors with too many decimals
93
+ */
94
+ roundToDecimals(value, decimals) {
95
+ const num = parseFloat(value);
96
+ if (isNaN(num)) {
97
+ return '0';
98
+ }
99
+ return num.toFixed(decimals);
100
+ }
101
+ /**
102
+ * Loads all pairs from The Graph and caches them as Uniswap SDK Pair instances.
103
+ * @param graphEndpoint The GraphQL endpoint URL
104
+ */
105
+ async loadAllPairsFromGraph() {
106
+ // Query for pairs with token info and reserves
107
+ const query = `{
108
+ pairs(first: 1000) {
109
+ id
110
+ reserve0
111
+ reserve1
112
+ token0 { id symbol name decimals }
113
+ token1 { id symbol name decimals }
114
+ }
115
+ }`;
116
+ try {
117
+ const response = await fetch(this.config.graphEndpoint, {
118
+ method: 'POST',
119
+ headers: { 'Content-Type': 'application/json' },
120
+ body: JSON.stringify({ query })
121
+ });
122
+ if (!response.ok)
123
+ throw new Error(`Network error: ${response.status}`);
124
+ const { data } = await response.json();
125
+ if (!data || !data.pairs)
126
+ return;
127
+ const pairs = [];
128
+ for (const pair of data.pairs) {
129
+ pairs.push(this.createSDKPair(pair));
130
+ }
131
+ this.pairs = pairs;
132
+ // Find the WETH token from the pairs and set wethToken to a new Token instance if found
133
+ const wethPair = data.pairs.find((pair) => pair.token0.id.toLowerCase() === this.wethAddress.toLowerCase() ||
134
+ pair.token1.id.toLowerCase() === this.wethAddress.toLowerCase());
135
+ if (wethPair) {
136
+ const tokenData = wethPair.token0.id.toLowerCase() === this.wethAddress.toLowerCase()
137
+ ? wethPair.token0
138
+ : wethPair.token1;
139
+ this.wethToken = {
140
+ address: tokenData.id,
141
+ symbol: tokenData.symbol,
142
+ name: tokenData.name,
143
+ decimals: Number(tokenData.decimals),
144
+ };
145
+ }
146
+ else {
147
+ throw new Error('No weth token found');
148
+ }
149
+ if (this.resolvePairsLoaded) {
150
+ this.resolvePairsLoaded();
151
+ this.resolvePairsLoaded = null;
152
+ }
153
+ }
154
+ catch (error) {
155
+ console.error('Error loading pairs from graph:', error);
156
+ if (this.resolvePairsLoaded) {
157
+ this.resolvePairsLoaded(); // resolve anyway to avoid deadlock
158
+ this.resolvePairsLoaded = null;
159
+ }
160
+ }
161
+ }
162
+ async waitForPairsLoaded() {
163
+ return await this.pairsLoadedPromise;
164
+ }
165
+ async waitForPartnerFeeLoaded() {
166
+ return await this.partnerFeeLoadedPromise;
167
+ }
168
+ createSDKPair(pair) {
169
+ const { token0, token1, id, reserve0, reserve1 } = pair;
170
+ const sdkToken0 = new sdk_core_1.Token(this.chainId, token0.id, Number(token0.decimals), token0.symbol, token0.name);
171
+ const sdkToken1 = new sdk_core_1.Token(this.chainId, token1.id, Number(token1.decimals), token1.symbol, token1.name);
172
+ let reserve0BN;
173
+ let reserve1BN;
174
+ if (reserve0 && reserve1) {
175
+ reserve0BN = (0, ethers_1.parseUnits)(reserve0, Number(token0.decimals));
176
+ reserve1BN = (0, ethers_1.parseUnits)(reserve1, Number(token1.decimals));
177
+ }
178
+ else {
179
+ throw new Error('No reserves data');
180
+ }
181
+ const amount0 = sdk_core_1.CurrencyAmount.fromRawAmount(sdkToken0, reserve0BN.toString());
182
+ const amount1 = sdk_core_1.CurrencyAmount.fromRawAmount(sdkToken1, reserve1BN.toString());
183
+ const sdkPair = new v2_sdk_1.Pair(amount0, amount1);
184
+ return sdkPair;
185
+ }
186
+ /**
187
+ * Returns the cached pairs for use in routing.
188
+ */
189
+ getPairs() {
190
+ return this.pairs;
191
+ }
192
+ /**
193
+ * Finds the best trade path using Uniswap SDK for a given input amount.
194
+ * Returns the best path as an array of addresses, or null if no trade found.
195
+ */
196
+ async getBestTrade(fromToken, toToken, amountInWei, isOutputAmount) {
197
+ // Create Uniswap SDK Token instances
198
+ const sdkFromToken = new sdk_core_1.Token(this.chainId, fromToken.address, fromToken.decimals, fromToken.symbol, fromToken.name);
199
+ const sdkToToken = new sdk_core_1.Token(this.chainId, toToken.address, toToken.decimals, toToken.symbol, toToken.name);
200
+ // Create currency amount
201
+ const currencyAmount = sdk_core_1.CurrencyAmount.fromRawAmount(isOutputAmount ? sdkToToken : sdkFromToken, amountInWei);
202
+ await this.waitForPairsLoaded();
203
+ await this.waitForPartnerFeeLoaded();
204
+ const pairs = this.getPairs();
205
+ if (!pairs || pairs.length === 0) {
206
+ throw new Error('Pairs not loaded yet. Please wait for initialization.');
207
+ }
208
+ const tradeConfig = {
209
+ maxHops: 3,
210
+ maxNumResults: 1,
211
+ };
212
+ const trades = isOutputAmount ?
213
+ v2_sdk_1.Trade.bestTradeExactOut(pairs, sdkFromToken, currencyAmount, tradeConfig)
214
+ : v2_sdk_1.Trade.bestTradeExactIn(pairs, currencyAmount, sdkToToken, tradeConfig);
215
+ if (trades.length > 0) {
216
+ return trades[0];
217
+ }
218
+ else {
219
+ return null;
220
+ }
221
+ }
222
+ trimTrailingZeros(value) {
223
+ if (!value.includes('.'))
224
+ return value; // no decimals
225
+ // Remove trailing zeros after decimal
226
+ value = value.replace(/\.?0+$/, '');
227
+ return value;
228
+ }
229
+ /**
230
+ *
231
+ * @param sellToken
232
+ * @param buyToken
233
+ * @param targetAmount
234
+ * @param isOutputAmount true if user input output (How much tokens to receive) and not input (how much tokens to sell)
235
+ * @param slippage
236
+ * @returns
237
+ */
238
+ async calculateTrade(sellToken, buyToken, targetAmount, isOutputAmount, slippage) {
239
+ try {
240
+ // Round the input amount to avoid parseUnits errors
241
+ const roundedAmountIn = this.roundToDecimals(targetAmount, isOutputAmount ? buyToken.decimals : sellToken.decimals);
242
+ let sellAmountWei = (0, ethers_1.parseUnits)(roundedAmountIn, isOutputAmount ? buyToken.decimals : sellToken.decimals);
243
+ if (isOutputAmount && this.partnerFee && this.partnerFee > 0n) {
244
+ // For Exact receice - Add partner fee to the final result
245
+ const numerator = sellAmountWei * exports.PARTNER_FEE_BPS_DIVISOR;
246
+ const denominator = exports.PARTNER_FEE_BPS_DIVISOR - this.partnerFee;
247
+ // Use ceiling division to avoid rounding down
248
+ sellAmountWei = (numerator + denominator - 1n) / denominator;
249
+ }
250
+ // Get the best path
251
+ const trade = await this.getBestTrade(sellToken.address == ethers_1.ethers.ZeroAddress ? this.wethToken : sellToken, buyToken.address == ethers_1.ethers.ZeroAddress ? this.wethToken : buyToken, sellAmountWei.toString(), isOutputAmount);
252
+ if (!trade) {
253
+ throw new Error('No trade path found for the given tokens and amount.');
254
+ }
255
+ const amountIn = trade.inputAmount.quotient.toString();
256
+ const amountOut = trade.outputAmount.quotient.toString();
257
+ let amounts = {
258
+ amountIn: (0, ethers_1.formatUnits)(amountIn, sellToken.decimals),
259
+ amountOut: isOutputAmount ? this.trimTrailingZeros(roundedAmountIn) : (0, ethers_1.formatUnits)(amountOut, buyToken.decimals),
260
+ amountInRaw: amountIn,
261
+ amountOutRaw: amountOut,
262
+ };
263
+ const slippagePercent = new sdk_core_1.Percent(Math.round(parseFloat(slippage) * 100), 10000);
264
+ let maxAmountIn, minAmountOut;
265
+ if (isOutputAmount) {
266
+ maxAmountIn = trade.maximumAmountIn(slippagePercent).quotient.toString();
267
+ amounts.maxAmountInRaw = maxAmountIn;
268
+ amounts.maxAmountIn = (0, ethers_1.formatUnits)(maxAmountIn, sellToken.decimals);
269
+ }
270
+ else {
271
+ minAmountOut = trade.minimumAmountOut(slippagePercent).quotient.toString();
272
+ amounts.minAmountOutRaw = minAmountOut;
273
+ amounts.minAmountOut = (0, ethers_1.formatUnits)(minAmountOut, buyToken.decimals);
274
+ }
275
+ if (this.partnerFee && this.partnerFee > 0n) {
276
+ if (!isOutputAmount) {
277
+ // ---- Exact input: remove partner fee from amountOut ----
278
+ const amountOut = BigInt(trade.outputAmount.quotient.toString());
279
+ const amountOutMinusFee = (amountOut * (exports.PARTNER_FEE_BPS_DIVISOR - this.partnerFee)) / exports.PARTNER_FEE_BPS_DIVISOR;
280
+ amounts.amountOutRaw = amountOutMinusFee.toString();
281
+ amounts.amountOut = (0, ethers_1.formatUnits)(amountOutMinusFee, buyToken.decimals);
282
+ if (minAmountOut) {
283
+ const minOut = BigInt(minAmountOut.toString());
284
+ const minOutMinusFee = (minOut * (exports.PARTNER_FEE_BPS_DIVISOR - this.partnerFee)) / exports.PARTNER_FEE_BPS_DIVISOR;
285
+ amounts.minAmountOutRaw = minOutMinusFee.toString();
286
+ amounts.minAmountOut = (0, ethers_1.formatUnits)(minOutMinusFee, buyToken.decimals);
287
+ }
288
+ }
289
+ }
290
+ return {
291
+ trade,
292
+ computed: amounts,
293
+ };
294
+ }
295
+ catch (error) {
296
+ console.error('Error calculating expected output:', error);
297
+ throw error;
298
+ }
299
+ }
300
+ async checkApproval(tokenAddress, amount, spenderAddress) {
301
+ try {
302
+ const tokenContract = new ethers_1.Contract(tokenAddress, ['function allowance(address,address) view returns (uint256)'], this.provider);
303
+ const signerAddress = await this.signer?.getAddress();
304
+ if (!signerAddress) {
305
+ throw new Error('Please connect wallet first');
306
+ }
307
+ const allowance = await tokenContract.allowance(signerAddress, spenderAddress);
308
+ const amountWei = (0, ethers_1.parseUnits)(amount, 18); // Assuming 18 decimals for approval check
309
+ return allowance >= amountWei;
310
+ }
311
+ catch (error) {
312
+ console.error('Error checking approval:', error);
313
+ return false;
314
+ }
315
+ }
316
+ async isApprovalNeeded(fromToken, amountInWei) {
317
+ if (!this.signer) {
318
+ throw new Error('Please connect wallet first');
319
+ }
320
+ // If fromToken is not native, check allowance and approve if needed
321
+ if (fromToken.address !== ethers_1.ethers.ZeroAddress) {
322
+ const tokenContract = new ethers_1.Contract(fromToken.address, ['function allowance(address,address) view returns (uint256)', 'function approve(address,uint256) returns (bool)'], this.signer);
323
+ const signerAddress = await this.signer.getAddress();
324
+ const allowanceTo = this.config.proxyAddress || this.config.routerAddress;
325
+ const allowance = await tokenContract.allowance(signerAddress, allowanceTo);
326
+ if (allowance < amountInWei) {
327
+ return {
328
+ isApprovalNeeded: true,
329
+ tokenContract,
330
+ signerAddress,
331
+ allowanceTo,
332
+ };
333
+ }
334
+ }
335
+ return {
336
+ isApprovalNeeded: false
337
+ };
338
+ }
339
+ async approveIfNeedApproval(fromToken, amountInWei) {
340
+ const isApprovalNeededInfo = await this.isApprovalNeeded(fromToken, amountInWei);
341
+ if (!isApprovalNeededInfo.isApprovalNeeded) {
342
+ return null;
343
+ }
344
+ return await isApprovalNeededInfo.tokenContract.approve(isApprovalNeededInfo.allowanceTo, ethers_1.ethers.MaxUint256);
345
+ }
346
+ async swapTokens(fromToken, toToken, amountInWei, amountOutWei, path, isOutputAmount, deadline) {
347
+ if (!this.signer) {
348
+ throw new Error('Please connect wallet first');
349
+ }
350
+ try {
351
+ // Round the amounts to the appropriate decimal precision to avoid parseUnits errors
352
+ const deadlineTimestamp = Math.floor(Date.now() / 1000) + (deadline * 60);
353
+ let tx;
354
+ const signerAddress = await this.signer.getAddress();
355
+ const iface = this.proxyContract ? this.proxyContract.interface : this.routerContract.interface;
356
+ let swapData;
357
+ const to = this.isFeeActive ? this.config.proxyAddress : signerAddress;
358
+ if (isOutputAmount) {
359
+ // Buy mode: user specifies output amount (isOutputAmount === true)
360
+ if (fromToken.address === ethers_1.ethers.ZeroAddress) {
361
+ // ETH -> token (swapETHForExactTokens)
362
+ swapData = iface.encodeFunctionData("swapETHForExactTokens", [
363
+ amountOutWei,
364
+ path,
365
+ to,
366
+ deadlineTimestamp
367
+ ]);
368
+ }
369
+ else if (toToken.address === ethers_1.ethers.ZeroAddress) {
370
+ // token -> ETH (swapTokensForExactETH)
371
+ swapData = iface.encodeFunctionData("swapTokensForExactETH", [
372
+ amountOutWei,
373
+ amountInWei,
374
+ path,
375
+ to,
376
+ deadlineTimestamp
377
+ ]);
378
+ }
379
+ else {
380
+ // token -> token (swapTokensForExactTokens)
381
+ swapData = iface.encodeFunctionData("swapTokensForExactTokens", [
382
+ amountOutWei,
383
+ amountInWei,
384
+ path,
385
+ to,
386
+ deadlineTimestamp
387
+ ]);
388
+ }
389
+ }
390
+ else {
391
+ if (fromToken.address === ethers_1.ethers.ZeroAddress) {
392
+ // ETH -> token
393
+ swapData = iface.encodeFunctionData("swapExactETHForTokens", [
394
+ amountOutWei,
395
+ path,
396
+ to,
397
+ deadlineTimestamp
398
+ ]);
399
+ }
400
+ else if (toToken.address === ethers_1.ethers.ZeroAddress) {
401
+ // token -> ETH
402
+ swapData = iface.encodeFunctionData("swapExactTokensForETH", [
403
+ amountInWei,
404
+ amountOutWei,
405
+ path,
406
+ to,
407
+ deadlineTimestamp
408
+ ]);
409
+ }
410
+ else {
411
+ // token -> token
412
+ swapData = iface.encodeFunctionData("swapExactTokensForTokens", [
413
+ amountInWei,
414
+ amountOutWei,
415
+ path,
416
+ to,
417
+ deadlineTimestamp
418
+ ]);
419
+ }
420
+ }
421
+ if (this.proxyContract) {
422
+ swapData = (0, ethers_1.hexlify)(this.concatSelectorAndParams(ethers_1.ethers.getBytes(swapData), [], "permit", this.swapOptions.partnerKey));
423
+ }
424
+ tx = await this.signer.sendTransaction({
425
+ to: this.config.proxyAddress || this.config.routerAddress,
426
+ from: signerAddress,
427
+ data: swapData,
428
+ value: fromToken.address === ethers_1.ethers.ZeroAddress ? amountInWei : 0n
429
+ });
430
+ return tx;
431
+ }
432
+ catch (error) {
433
+ console.error('Error swapping tokens:', error);
434
+ throw error;
435
+ }
436
+ }
437
+ async getPairAddress(tokenA, tokenB) {
438
+ try {
439
+ return await this.factoryContract.getPair(tokenA, tokenB);
440
+ }
441
+ catch (error) {
442
+ console.error('Error getting pair address:', error);
443
+ throw error;
444
+ }
445
+ }
446
+ async checkLiquidityExists(tokenA, tokenB) {
447
+ try {
448
+ const pairAddress = await this.getPairAddress(tokenA, tokenB);
449
+ return pairAddress !== ethers_1.ZeroAddress;
450
+ }
451
+ catch (error) {
452
+ console.error('Error checking liquidity:', error);
453
+ return false;
454
+ }
455
+ }
456
+ // Uniswap SDK methods for advanced trading
457
+ async createTrade(fromToken, toToken, amountIn, slippageTolerance = 0.5) {
458
+ try {
459
+ // Create Token instances for Uniswap SDK
460
+ const fromTokenInstance = new sdk_core_1.Token(this.chainId, fromToken.address, fromToken.decimals, fromToken.symbol, fromToken.name);
461
+ const toTokenInstance = new sdk_core_1.Token(this.chainId, toToken.address, toToken.decimals, toToken.symbol, toToken.name);
462
+ // Create currency amount
463
+ const currencyAmount = sdk_core_1.CurrencyAmount.fromRawAmount(fromTokenInstance, (0, ethers_1.parseUnits)(amountIn, fromToken.decimals).toString());
464
+ // Get pair data
465
+ const pairAddress = await this.getPairAddress(fromToken.address, toToken.address);
466
+ if (pairAddress === ethers_1.ZeroAddress) {
467
+ throw new Error('No liquidity pair found');
468
+ }
469
+ // Create pair instance
470
+ const pair = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(fromTokenInstance, '0'), sdk_core_1.CurrencyAmount.fromRawAmount(toTokenInstance, '0'));
471
+ // Create route
472
+ const route = new v2_sdk_1.Route([pair], fromTokenInstance, toTokenInstance);
473
+ // Create trade
474
+ const trade = new v2_sdk_1.Trade(route, currencyAmount, sdk_core_1.TradeType.EXACT_INPUT);
475
+ return trade;
476
+ }
477
+ catch (error) {
478
+ console.error('Error creating trade:', error);
479
+ throw error;
480
+ }
481
+ }
482
+ /**
483
+ * Fetch tokens from the graph endpoint (subgraph)
484
+ * @param graphEndpoint The GraphQL endpoint URL
485
+ * @param search Optional search string for symbol or name
486
+ */
487
+ async getTokensFromGraph(limit = 100, search) {
488
+ const finalLimit = Math.min(limit, 1000);
489
+ const query = `{
490
+ tokens(first: ${finalLimit}, where: {
491
+ ${search ? `or: [
492
+ { symbol_contains_nocase: \"${search}\" }
493
+ { name_contains_nocase: \"${search}\" }
494
+ ]` : ''}
495
+ }) {
496
+ id
497
+ symbol
498
+ name
499
+ decimals
500
+ }
501
+ }`;
502
+ try {
503
+ const response = await fetch(this.config.graphEndpoint, {
504
+ method: 'POST',
505
+ headers: { 'Content-Type': 'application/json' },
506
+ body: JSON.stringify({ query })
507
+ });
508
+ if (!response.ok)
509
+ throw new Error(`Network error: ${response.status}`);
510
+ const { data } = await response.json();
511
+ if (!data || !data.tokens)
512
+ return [];
513
+ return data.tokens.map((token) => ({
514
+ address: token.id,
515
+ symbol: token.symbol,
516
+ name: token.name,
517
+ decimals: Number(token.decimals),
518
+ }));
519
+ }
520
+ catch (error) {
521
+ console.error('Error fetching tokens from graph:', error);
522
+ return [];
523
+ }
524
+ }
525
+ /**
526
+ * Concatenates bytes: selector, array of bytes (each element is Uint8Array), array length (uint8, 1 byte), marker (bytes16(keccak256(markerString)))
527
+ * @param selectorBytes Uint8Array — function selector (usually 4 bytes)
528
+ * @param arrayOfBytes Uint8Array[] — array of bytes (each element is Uint8Array)
529
+ * @param markerString string — string from which bytes16(keccak256(...)) will be derived
530
+ * @returns Uint8Array — concatenated result
531
+ */
532
+ concatSelectorAndParams(selectorBytes, arrayOfBytes, markerString, partnerKey) {
533
+ // Flatten permits/params into single bytes
534
+ const paramsBytes = arrayOfBytes.length === 0
535
+ ? new Uint8Array(0)
536
+ : arrayOfBytes.reduce((acc, arr) => {
537
+ const res = new Uint8Array(acc.length + arr.length);
538
+ res.set(acc, 0);
539
+ res.set(arr, acc.length);
540
+ return res;
541
+ });
542
+ const arrayLengthByte = new Uint8Array([arrayOfBytes.length & 0xff]);
543
+ const markerHash = ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes(markerString));
544
+ const markerBytes = ethers_1.ethers.getBytes(markerHash).slice(0, 16);
545
+ const parts = [
546
+ selectorBytes,
547
+ paramsBytes,
548
+ arrayLengthByte,
549
+ markerBytes,
550
+ ];
551
+ if (partnerKey) {
552
+ const partnerKeyBytes = ethers_1.ethers.getBytes(partnerKey); // 32 bytes
553
+ const partnerFlagHash = ethers_1.ethers.keccak256(ethers_1.ethers.toUtf8Bytes("is_partner_fee"));
554
+ const partnerFlagBytes = ethers_1.ethers.getBytes(partnerFlagHash).slice(0, 16); // 16 bytes
555
+ parts.push(partnerKeyBytes, partnerFlagBytes);
556
+ }
557
+ const totalLen = parts.reduce((sum, p) => sum + p.length, 0);
558
+ const out = new Uint8Array(totalLen);
559
+ let offset = 0;
560
+ for (const p of parts) {
561
+ out.set(p, offset);
562
+ offset += p.length;
563
+ }
564
+ return out;
565
+ }
566
+ }
567
+ exports.SwapService = SwapService;
568
+ //# sourceMappingURL=swap.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.service.js","sourceRoot":"","sources":["../../../src/services/swap.service.ts"],"names":[],"mappings":";;;AAAA,mCAAmM;AACnM,gDAAwF;AACxF,4CAAqD;AAIxC,QAAA,uBAAuB,GAAG,MAAO,CAAC;AAE/C,MAAa,WAAW;IAqBtB,YACE,QAA2C,EACnC,MAA4B,EAC5B,WAA2B;QAD3B,WAAM,GAAN,MAAM,CAAsB;QAC5B,gBAAW,GAAX,WAAW,CAAgB;QAtB7B,WAAM,GAAkB,IAAI,CAAC;QAM7B,UAAK,GAAW,EAAE,CAAC;QAEnB,uBAAkB,GAAwB,IAAI,CAAC;QAE/C,4BAAuB,GAAwB,IAAI,CAAC;QACpD,eAAU,GAAW,EAAE,CAAC;QACxB,gBAAW,GAAY,KAAK,CAAC;QAYnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,gCAAgC;QAChC,MAAM,SAAS,GAAG;YAChB,0BAA0B;YAC1B,kKAAkK;YAClK,kKAAkK;YAElK,wBAAwB;YACxB,wJAAwJ;YACxJ,qJAAqJ;YACrJ,+JAA+J;YAC/J,+JAA+J;YAE/J,cAAc;YACd,8GAA8G;YAC9G,8GAA8G;YAC9G,6GAA6G;YAC7G,6HAA6H;YAE7H,WAAW;YACX,iDAAiD;SAClD,CAAC;QAEF,kCAAkC;QAClC,MAAM,UAAU,GAAG;YACjB,uFAAuF;YACvF,8DAA8D;YAC9D,wDAAwD;SACzD,CAAC;QAEF,MAAM,QAAQ,GAAG;YACf,GAAG,SAAS;YACZ,0FAA0F;YAC1F,oDAAoD;SACrD,CAAA;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9E,IAAI,CAAC,eAAe,GAAG,IAAI,iBAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEjF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAChD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACrD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClF,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,+EAA+E;QAEvG,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACjC,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,sEAAsE;QACtE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAa,CAAC;QAEtE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAa,CAAC;QACtE,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,KAAa,EAAE,QAAgB;QACrD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,qBAAqB;QAChC,+CAA+C;QAC/C,MAAM,KAAK,GAAG;;;;;;;;MAQZ,CAAC;QACH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;aAChC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACjC,MAAM,KAAK,GAAW,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CACzB,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YAEnB,wFAAwF;YACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAC9B,CAAC,IAAS,EAAE,EAAE,CACZ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;gBAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAClE,CAAC;YACF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GACb,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;oBACjE,CAAC,CAAC,QAAQ,CAAC,MAAM;oBACjB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACtB,IAAI,CAAC,SAAS,GAAG;oBACf,OAAO,EAAE,SAAS,CAAC,EAAE;oBACrB,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;iBACrC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;YACxC,CAAC;YAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,mCAAmC;gBAC9D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC7B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,uBAAuB;QAClC,OAAO,MAAM,IAAI,CAAC,uBAAuB,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,IAkBb;QACC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAExD,MAAM,SAAS,GAAG,IAAI,gBAAK,CACzB,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EACvB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,IAAI,CACZ,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,gBAAK,CACzB,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EACvB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,IAAI,CACZ,CAAC;QAEF,IAAI,UAAwB,CAAC;QAC7B,IAAI,UAAwB,CAAC;QAE7B,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACzB,UAAU,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3D,UAAU,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACrC,CAAC;QAED,MAAM,OAAO,GAAG,yBAAc,CAAC,aAAa,CAC1C,SAAS,EACT,UAAU,CAAC,QAAQ,EAAE,CACtB,CAAC;QAEF,MAAM,OAAO,GAAG,yBAAc,CAAC,aAAa,CAC1C,SAAS,EACT,UAAU,CAAC,QAAQ,EAAE,CACtB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,aAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,YAAY,CACxB,SAAqB,EACrB,OAAmB,EACnB,WAAmB,EACnB,cAAwB;QAGxB,qCAAqC;QACrC,MAAM,YAAY,GAAG,IAAI,gBAAK,CAC5B,IAAI,CAAC,OAAO,EACZ,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,IAAI,CACf,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,gBAAK,CAC1B,IAAI,CAAC,OAAO,EACZ,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,IAAI,CACb,CAAC;QAEF,yBAAyB;QACzB,MAAM,cAAc,GAAG,yBAAc,CAAC,aAAa,CACjD,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAC1C,WAAW,CACZ,CAAC;QACF,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,CAAC;YACV,aAAa,EAAE,CAAC;SACjB,CAAC;QAEF,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC;YAC7B,cAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,CAAC;YACzE,CAAC,CAAC,cAAK,CAAC,gBAAgB,CACtB,KAAK,EACL,cAAc,EACd,UAAU,EACV,WAAW,CACZ,CAAC;QAEJ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,KAAa;QACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,cAAc;QAEtD,sCAAsC;QACtC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAEpC,OAAO,KAAK,CAAC;IACf,CAAC;IAGD;;;;;;;;OAQG;IACH,KAAK,CAAC,cAAc,CAClB,SAAqB,EACrB,QAAoB,EACpB,YAAoB,EACpB,cAAuB,EACvB,QAAgB;QAKhB,IAAI,CAAC;YAEH,oDAAoD;YACpD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEpH,IAAI,aAAa,GAAG,IAAA,mBAAU,EAC5B,eAAe,EACf,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CACxD,CAAC;YAEF,IAAI,cAAc,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;gBAC9D,0DAA0D;gBAC1D,MAAM,SAAS,GAAG,aAAa,GAAG,+BAAuB,CAAC;gBAC1D,MAAM,WAAW,GAAG,+BAAuB,GAAG,IAAI,CAAC,UAAU,CAAC;gBAE9D,8CAA8C;gBAC9C,aAAa,GAAG,CAAC,SAAS,GAAG,WAAW,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC;YAC/D,CAAC;YAGD,oBAAoB;YACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CACnC,SAAS,CAAC,OAAO,IAAI,eAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC,CAAC,SAAS,EACrE,QAAQ,CAAC,OAAO,IAAI,eAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC,CAAC,QAAQ,EACnE,aAAa,CAAC,QAAQ,EAAE,EACxB,cAAc,CACf,CAAC;YAEF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAEzD,IAAI,OAAO,GAAoB;gBAC7B,QAAQ,EAAE,IAAA,oBAAW,EAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;gBACnD,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAA,oBAAW,EAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBAC/G,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE,SAAS;aACxB,CAAC;YAEF,MAAM,eAAe,GAAG,IAAI,kBAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YAEnF,IAAI,WAAW,EAAE,YAAY,CAAC;YAE9B,IAAI,cAAc,EAAE,CAAC;gBACnB,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACzE,OAAO,CAAC,cAAc,GAAG,WAAW,CAAC;gBACrC,OAAO,CAAC,WAAW,GAAG,IAAA,oBAAW,EAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAC3E,OAAO,CAAC,eAAe,GAAG,YAAY,CAAC;gBACvC,OAAO,CAAC,YAAY,GAAG,IAAA,oBAAW,EAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACtE,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;gBAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,2DAA2D;oBAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACjE,MAAM,iBAAiB,GAAG,CAAC,SAAS,GAAG,CAAC,+BAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,+BAAuB,CAAC;oBAE9G,OAAO,CAAC,YAAY,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;oBACpD,OAAO,CAAC,SAAS,GAAG,IAAA,oBAAW,EAAC,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAEtE,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC/C,MAAM,cAAc,GAAG,CAAC,MAAM,GAAG,CAAC,+BAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,+BAAuB,CAAC;wBAExG,OAAO,CAAC,eAAe,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;wBACpD,OAAO,CAAC,YAAY,GAAG,IAAA,oBAAW,EAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACxE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO;gBACL,KAAK;gBACL,QAAQ,EAAE,OAAO;aAClB,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,YAAoB,EACpB,MAAc,EACd,cAAsB;QAEtB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,iBAAQ,CAChC,YAAY,EACZ,CAAC,4DAA4D,CAAC,EAC9D,IAAI,CAAC,QAAQ,CACd,CAAC;YAEF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YACtD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAG,IAAA,mBAAU,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,0CAA0C;YACpF,OAAO,SAAS,IAAI,SAAS,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,SAAqB,EACrB,WAAmB;QAOnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,oEAAoE;QACpE,IAAI,SAAS,CAAC,OAAO,KAAK,eAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,IAAI,iBAAQ,CAChC,SAAS,CAAC,OAAO,EACjB,CAAC,4DAA4D,EAAE,kDAAkD,CAAC,EAClH,IAAI,CAAC,MAAM,CACZ,CAAC;YAEF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAErD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAC1E,MAAM,SAAS,GAAW,MAAM,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YACpF,IAAI,SAAS,GAAG,WAAW,EAAE,CAAC;gBAC5B,OAAO;oBACL,gBAAgB,EAAE,IAAI;oBACtB,aAAa;oBACb,aAAa;oBACb,WAAW;iBACZ,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,gBAAgB,EAAE,KAAK;SACxB,CAAC;IAEJ,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,SAAqB,EACrB,WAAmB;QAGnB,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEjF,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,OAAO,MAAM,oBAAoB,CAAC,aAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,WAAW,EAAE,eAAM,CAAC,UAAU,CAAC,CAAC;IAChH,CAAC;IAED,KAAK,CAAC,UAAU,CACd,SAAqB,EACrB,OAAmB,EACnB,WAAmB,EACnB,YAAoB,EACpB,IAAc,EACd,cAAuB,EACvB,QAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC;YACH,oFAAoF;YACpF,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;YAE1E,IAAI,EAAE,CAAC;YACP,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;YAEhG,IAAI,QAAgB,CAAC;YAGrB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAEvE,IAAI,cAAc,EAAE,CAAC;gBACnB,mEAAmE;gBACnE,IAAI,SAAS,CAAC,OAAO,KAAK,eAAM,CAAC,WAAW,EAAE,CAAC;oBAC7C,uCAAuC;oBACvC,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,uBAAuB,EAAE;wBAC3D,YAAY;wBACZ,IAAI;wBACJ,EAAE;wBACF,iBAAiB;qBAClB,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,OAAO,CAAC,OAAO,KAAK,eAAM,CAAC,WAAW,EAAE,CAAC;oBAClD,uCAAuC;oBACvC,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,uBAAuB,EAAE;wBAC3D,YAAY;wBACZ,WAAW;wBACX,IAAI;wBACJ,EAAE;wBACF,iBAAiB;qBAClB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,4CAA4C;oBAC5C,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,0BAA0B,EAAE;wBAC9D,YAAY;wBACZ,WAAW;wBACX,IAAI;wBACJ,EAAE;wBACF,iBAAiB;qBAClB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,SAAS,CAAC,OAAO,KAAK,eAAM,CAAC,WAAW,EAAE,CAAC;oBAC7C,eAAe;oBACf,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,uBAAuB,EAAE;wBAC3D,YAAY;wBACZ,IAAI;wBACJ,EAAE;wBACF,iBAAiB;qBAClB,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,OAAO,CAAC,OAAO,KAAK,eAAM,CAAC,WAAW,EAAE,CAAC;oBAClD,eAAe;oBACf,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,uBAAuB,EAAE;wBAC3D,WAAW;wBACX,YAAY;wBACZ,IAAI;wBACJ,EAAE;wBACF,iBAAiB;qBAClB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,iBAAiB;oBACjB,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,0BAA0B,EAAE;wBAC9D,WAAW;wBACX,YAAY;wBACZ,IAAI;wBACJ,EAAE;wBACF,iBAAiB;qBAClB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,QAAQ,GAAG,IAAA,gBAAO,EAAC,IAAI,CAAC,uBAAuB,CAAC,eAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YACzH,CAAC;YAED,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;gBACrC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa;gBACzD,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,SAAS,CAAC,OAAO,KAAK,eAAM,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;aACnE,CAAC,CAAC;YAGH,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,MAAc;QACjD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,MAAc,EAAE,MAAc;QACvD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9D,OAAO,WAAW,KAAK,oBAAW,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,WAAW,CACf,SAAqB,EACrB,OAAmB,EACnB,QAAgB,EAChB,oBAA4B,GAAG;QAE/B,IAAI,CAAC;YACH,yCAAyC;YACzC,MAAM,iBAAiB,GAAG,IAAI,gBAAK,CACjC,IAAI,CAAC,OAAO,EACZ,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,IAAI,CACf,CAAC;YAEF,MAAM,eAAe,GAAG,IAAI,gBAAK,CAC/B,IAAI,CAAC,OAAO,EACZ,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,IAAI,CACb,CAAC;YAEF,yBAAyB;YACzB,MAAM,cAAc,GAAG,yBAAc,CAAC,aAAa,CACjD,iBAAiB,EACjB,IAAA,mBAAU,EAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CACpD,CAAC;YAEF,gBAAgB;YAChB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAClF,IAAI,WAAW,KAAK,oBAAW,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,uBAAuB;YACvB,MAAM,IAAI,GAAG,IAAI,aAAI,CACnB,yBAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,GAAG,CAAC,EACpD,yBAAc,CAAC,aAAa,CAAC,eAAe,EAAE,GAAG,CAAC,CACnD,CAAC;YAEF,eAAe;YACf,MAAM,KAAK,GAAG,IAAI,cAAK,CAAC,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;YAEpE,eAAe;YACf,MAAM,KAAK,GAAG,IAAI,cAAK,CACrB,KAAK,EACL,cAAc,EACd,oBAAS,CAAC,WAAW,CACtB,CAAC;YAEF,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,QAAgB,GAAG,EAAE,MAAe;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG;sBACI,UAAU;UACtB,MAAM,CAAC,CAAC,CAAC;wCACqB,MAAM;sCACR,MAAM;UAClC,CAAC,CAAC,CAAC,EAAE;;;;;;;MAOT,CAAC;QACH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;aAChC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;gBACtC,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;aACjC,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAID;;;;;;OAMG;IACK,uBAAuB,CAC7B,aAAyB,EACzB,YAA0B,EAC1B,YAAoB,EACpB,UAAmB;QAEnB,2CAA2C;QAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC;YAC3C,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACjC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAChB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACzB,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CAAC;QAEL,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;QAErE,MAAM,UAAU,GAAG,eAAM,CAAC,SAAS,CAAC,eAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,eAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7D,MAAM,KAAK,GAAiB;YAC1B,aAAa;YACb,WAAW;YACX,eAAe;YACf,WAAW;SACZ,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,eAAe,GAAG,eAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;YAChE,MAAM,eAAe,GAAG,eAAM,CAAC,SAAS,CAAC,eAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC/E,MAAM,gBAAgB,GAAG,eAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;YACnF,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACnB,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAryBD,kCAqyBC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.service.d.ts","sourceRoot":"","sources":["../../../src/services/wallet.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAkB;gBAGvC,MAAM,EAAE,oBAAoB,EAC5B,gBAAgB,CAAC,EAAE,eAAe;IAa9B,OAAO,CAAC,gBAAgB,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAyElE,UAAU,IAAI,IAAI;IAKlB,WAAW,IAAI,OAAO;IAItB,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B,WAAW,IAAI,eAAe,GAAG,eAAe,GAAG,IAAI;IAIvD,SAAS,IAAI,MAAM,GAAG,IAAI;IAKpB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAWpC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAuBtC,gBAAgB;CAIjB"}