@catalyst-team/poly-sdk 0.1.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.
- package/.env +0 -0
- package/README.md +803 -0
- package/dist/__tests__/clob-api.test.d.ts +5 -0
- package/dist/__tests__/clob-api.test.d.ts.map +1 -0
- package/dist/__tests__/clob-api.test.js +240 -0
- package/dist/__tests__/clob-api.test.js.map +1 -0
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
- package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
- package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
- package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
- package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
- package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
- package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.js +161 -0
- package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
- package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
- package/dist/__tests__/test-utils.d.ts +92 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/__tests__/test-utils.js +143 -0
- package/dist/__tests__/test-utils.js.map +1 -0
- package/dist/clients/bridge-client.d.ts +388 -0
- package/dist/clients/bridge-client.d.ts.map +1 -0
- package/dist/clients/bridge-client.js +587 -0
- package/dist/clients/bridge-client.js.map +1 -0
- package/dist/clients/clob-api.d.ts +318 -0
- package/dist/clients/clob-api.d.ts.map +1 -0
- package/dist/clients/clob-api.js +388 -0
- package/dist/clients/clob-api.js.map +1 -0
- package/dist/clients/ctf-client.d.ts +473 -0
- package/dist/clients/ctf-client.d.ts.map +1 -0
- package/dist/clients/ctf-client.js +915 -0
- package/dist/clients/ctf-client.js.map +1 -0
- package/dist/clients/data-api.d.ts +134 -0
- package/dist/clients/data-api.d.ts.map +1 -0
- package/dist/clients/data-api.js +265 -0
- package/dist/clients/data-api.js.map +1 -0
- package/dist/clients/gamma-api.d.ts +401 -0
- package/dist/clients/gamma-api.d.ts.map +1 -0
- package/dist/clients/gamma-api.js +352 -0
- package/dist/clients/gamma-api.js.map +1 -0
- package/dist/clients/trading-client.d.ts +252 -0
- package/dist/clients/trading-client.d.ts.map +1 -0
- package/dist/clients/trading-client.js +543 -0
- package/dist/clients/trading-client.js.map +1 -0
- package/dist/clients/websocket-manager.d.ts +100 -0
- package/dist/clients/websocket-manager.d.ts.map +1 -0
- package/dist/clients/websocket-manager.js +193 -0
- package/dist/clients/websocket-manager.js.map +1 -0
- package/dist/core/cache-adapter-bridge.d.ts +36 -0
- package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
- package/dist/core/cache-adapter-bridge.js +81 -0
- package/dist/core/cache-adapter-bridge.js.map +1 -0
- package/dist/core/cache.d.ts +40 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +71 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/errors.d.ts +38 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +84 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +31 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +70 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/types.d.ts +314 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +19 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/unified-cache.d.ts +63 -0
- package/dist/core/unified-cache.d.ts.map +1 -0
- package/dist/core/unified-cache.js +114 -0
- package/dist/core/unified-cache.js.map +1 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/errors.d.ts +33 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +86 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +62 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +173 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +155 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/guide.d.ts +12 -0
- package/dist/mcp/tools/guide.d.ts.map +1 -0
- package/dist/mcp/tools/guide.js +801 -0
- package/dist/mcp/tools/guide.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +11 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +27 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/market.d.ts +11 -0
- package/dist/mcp/tools/market.d.ts.map +1 -0
- package/dist/mcp/tools/market.js +314 -0
- package/dist/mcp/tools/market.js.map +1 -0
- package/dist/mcp/tools/order.d.ts +10 -0
- package/dist/mcp/tools/order.d.ts.map +1 -0
- package/dist/mcp/tools/order.js +258 -0
- package/dist/mcp/tools/order.js.map +1 -0
- package/dist/mcp/tools/trade.d.ts +38 -0
- package/dist/mcp/tools/trade.d.ts.map +1 -0
- package/dist/mcp/tools/trade.js +314 -0
- package/dist/mcp/tools/trade.js.map +1 -0
- package/dist/mcp/tools/trader.d.ts +11 -0
- package/dist/mcp/tools/trader.d.ts.map +1 -0
- package/dist/mcp/tools/trader.js +277 -0
- package/dist/mcp/tools/trader.js.map +1 -0
- package/dist/mcp/tools/wallet.d.ts +274 -0
- package/dist/mcp/tools/wallet.d.ts.map +1 -0
- package/dist/mcp/tools/wallet.js +579 -0
- package/dist/mcp/tools/wallet.js.map +1 -0
- package/dist/mcp/types.d.ts +413 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +5 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/services/authorization-service.d.ts +97 -0
- package/dist/services/authorization-service.d.ts.map +1 -0
- package/dist/services/authorization-service.js +279 -0
- package/dist/services/authorization-service.js.map +1 -0
- package/dist/services/market-service.d.ts +108 -0
- package/dist/services/market-service.d.ts.map +1 -0
- package/dist/services/market-service.js +458 -0
- package/dist/services/market-service.js.map +1 -0
- package/dist/services/realtime-service.d.ts +82 -0
- package/dist/services/realtime-service.d.ts.map +1 -0
- package/dist/services/realtime-service.js +150 -0
- package/dist/services/realtime-service.js.map +1 -0
- package/dist/services/swap-service.d.ts +217 -0
- package/dist/services/swap-service.d.ts.map +1 -0
- package/dist/services/swap-service.js +695 -0
- package/dist/services/swap-service.js.map +1 -0
- package/dist/services/wallet-service.d.ts +94 -0
- package/dist/services/wallet-service.d.ts.map +1 -0
- package/dist/services/wallet-service.js +173 -0
- package/dist/services/wallet-service.js.map +1 -0
- package/dist/utils/price-utils.d.ts +153 -0
- package/dist/utils/price-utils.d.ts.map +1 -0
- package/dist/utils/price-utils.js +236 -0
- package/dist/utils/price-utils.js.map +1 -0
- package/docs/00-design.md +760 -0
- package/docs/01-mcp.md +2041 -0
- package/docs/02-API.md +1148 -0
- package/docs/e2e/01-trader-tools.md +159 -0
- package/docs/e2e/02-market-tools.md +180 -0
- package/docs/e2e/03-order-tools.md +166 -0
- package/docs/e2e/04-wallet-tools.md +224 -0
- package/docs/e2e/05-trading-tools.md +327 -0
- package/docs/e2e/06-integration-scenarios.md +481 -0
- package/docs/e2e/coordinator.md +376 -0
- package/examples/01-basic-usage.ts +68 -0
- package/examples/02-smart-money.ts +95 -0
- package/examples/03-market-analysis.ts +108 -0
- package/examples/04-kline-aggregation.ts +158 -0
- package/examples/05-follow-wallet-strategy.ts +156 -0
- package/examples/06-services-demo.ts +124 -0
- package/examples/07-realtime-websocket.ts +117 -0
- package/examples/08-trading-orders.ts +278 -0
- package/examples/09-rewards-tracking.ts +187 -0
- package/examples/10-ctf-operations.ts +336 -0
- package/examples/11-live-arbitrage-scan.ts +221 -0
- package/examples/12-trending-arb-monitor.ts +406 -0
- package/examples/README.md +179 -0
- package/package.json +62 -0
- package/scripts/README.md +163 -0
- package/scripts/approvals/approve-erc1155.ts +129 -0
- package/scripts/approvals/approve-neg-risk-erc1155.ts +149 -0
- package/scripts/approvals/approve-neg-risk.ts +102 -0
- package/scripts/approvals/check-all-allowances.ts +150 -0
- package/scripts/approvals/check-allowance.ts +129 -0
- package/scripts/approvals/check-ctf-approval.ts +158 -0
- package/scripts/datas/001-report.md +486 -0
- package/scripts/datas/clone-modal-screenshot.png +0 -0
- package/scripts/deposit/deposit-native-usdc.ts +179 -0
- package/scripts/deposit/deposit-usdc.ts +155 -0
- package/scripts/deposit/swap-usdc-to-usdce.ts +375 -0
- package/scripts/research/research-markets.ts +166 -0
- package/scripts/trading/check-orders.ts +50 -0
- package/scripts/trading/sell-nvidia-positions.ts +206 -0
- package/scripts/trading/test-order.ts +172 -0
- package/scripts/truth.md +440 -0
- package/scripts/verify/test-approve-trading.ts +98 -0
- package/scripts/verify/test-provider-fix.ts +43 -0
- package/scripts/verify/test-search-mcp.ts +113 -0
- package/scripts/verify/verify-all-apis.ts +160 -0
- package/scripts/wallet/check-wallet-balances.ts +75 -0
- package/scripts/wallet/test-wallet-operations.ts +191 -0
- package/scripts/wallet/verify-wallet-tools.ts +124 -0
- package/src/__tests__/clob-api.test.ts +301 -0
- package/src/__tests__/integration/bridge-client.integration.test.ts +314 -0
- package/src/__tests__/integration/clob-api.integration.test.ts +218 -0
- package/src/__tests__/integration/ctf-client.integration.test.ts +331 -0
- package/src/__tests__/integration/data-api.integration.test.ts +194 -0
- package/src/__tests__/integration/gamma-api.integration.test.ts +206 -0
- package/src/__tests__/test-utils.ts +170 -0
- package/src/clients/bridge-client.ts +841 -0
- package/src/clients/clob-api.ts +629 -0
- package/src/clients/ctf-client.ts +1216 -0
- package/src/clients/data-api.ts +469 -0
- package/src/clients/gamma-api.ts +597 -0
- package/src/clients/trading-client.ts +749 -0
- package/src/clients/websocket-manager.ts +267 -0
- package/src/core/cache-adapter-bridge.ts +94 -0
- package/src/core/cache.ts +85 -0
- package/src/core/errors.ts +117 -0
- package/src/core/rate-limiter.ts +74 -0
- package/src/core/types.ts +360 -0
- package/src/core/unified-cache.ts +153 -0
- package/src/index.ts +455 -0
- package/src/mcp/README.md +380 -0
- package/src/mcp/errors.ts +124 -0
- package/src/mcp/index.ts +309 -0
- package/src/mcp/server.ts +183 -0
- package/src/mcp/tools/guide.ts +821 -0
- package/src/mcp/tools/index.ts +73 -0
- package/src/mcp/tools/market.ts +363 -0
- package/src/mcp/tools/order.ts +326 -0
- package/src/mcp/tools/trade.ts +417 -0
- package/src/mcp/tools/trader.ts +322 -0
- package/src/mcp/tools/wallet.ts +683 -0
- package/src/mcp/types.ts +472 -0
- package/src/services/authorization-service.ts +357 -0
- package/src/services/market-service.ts +544 -0
- package/src/services/realtime-service.ts +196 -0
- package/src/services/swap-service.ts +896 -0
- package/src/services/wallet-service.ts +259 -0
- package/src/utils/price-utils.ts +307 -0
- package/tsconfig.json +8 -0
- package/vitest.config.ts +19 -0
- package/vitest.integration.config.ts +18 -0
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge Client for Polymarket Cross-Chain Deposits
|
|
3
|
+
*
|
|
4
|
+
* Enables depositing assets from multiple chains (Ethereum, etc.)
|
|
5
|
+
* and having them automatically converted to USDC.e on Polygon for trading.
|
|
6
|
+
*
|
|
7
|
+
* Flow:
|
|
8
|
+
* 1. Request deposit addresses for your Polymarket wallet
|
|
9
|
+
* 2. Send assets to the unique deposit address for each chain/token
|
|
10
|
+
* 3. Assets are automatically bridged and swapped to USDC.e on Polygon
|
|
11
|
+
* 4. USDC.e is credited to your Polymarket account
|
|
12
|
+
*
|
|
13
|
+
* @see https://docs.polymarket.com/developers/misc-endpoints/bridge-deposit
|
|
14
|
+
* @see https://docs.polymarket.com/developers/misc-endpoints/bridge-supported-assets
|
|
15
|
+
*/
|
|
16
|
+
// ===== Constants =====
|
|
17
|
+
const BRIDGE_API_BASE = 'https://bridge.polymarket.com';
|
|
18
|
+
// Known chain information
|
|
19
|
+
export const SUPPORTED_CHAINS = {
|
|
20
|
+
ETHEREUM: {
|
|
21
|
+
chainId: 1,
|
|
22
|
+
name: 'Ethereum',
|
|
23
|
+
rpcUrl: 'https://eth.llamarpc.com',
|
|
24
|
+
},
|
|
25
|
+
POLYGON: {
|
|
26
|
+
chainId: 137,
|
|
27
|
+
name: 'Polygon',
|
|
28
|
+
rpcUrl: 'https://polygon-rpc.com',
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
// Known token addresses
|
|
32
|
+
export const BRIDGE_TOKENS = {
|
|
33
|
+
// Ethereum
|
|
34
|
+
ETH_USDC: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
35
|
+
ETH_WETH: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
|
|
36
|
+
ETH_DAI: '0x6B175474E89094C44Da98b954EeDeaC495271d0F',
|
|
37
|
+
// Polygon (destination)
|
|
38
|
+
POLYGON_USDC_E: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
|
|
39
|
+
POLYGON_NATIVE_USDC: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
|
|
40
|
+
};
|
|
41
|
+
// ===== Bridge Client =====
|
|
42
|
+
/**
|
|
43
|
+
* Client for interacting with Polymarket's cross-chain bridge
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const bridge = new BridgeClient();
|
|
48
|
+
*
|
|
49
|
+
* // Get supported assets
|
|
50
|
+
* const assets = await bridge.getSupportedAssets();
|
|
51
|
+
* console.log(`Supported: ${assets.map(a => a.tokenSymbol).join(', ')}`);
|
|
52
|
+
*
|
|
53
|
+
* // Create deposit addresses for your wallet
|
|
54
|
+
* const deposit = await bridge.createDepositAddresses('0xYourAddress');
|
|
55
|
+
* const ethUsdc = deposit.depositAddresses.find(
|
|
56
|
+
* d => d.chainName === 'Ethereum' && d.tokenSymbol === 'USDC'
|
|
57
|
+
* );
|
|
58
|
+
* console.log(`Send USDC on Ethereum to: ${ethUsdc.depositAddress}`);
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export class BridgeClient {
|
|
62
|
+
baseUrl;
|
|
63
|
+
timeout;
|
|
64
|
+
constructor(config = {}) {
|
|
65
|
+
this.baseUrl = config.baseUrl || BRIDGE_API_BASE;
|
|
66
|
+
this.timeout = config.timeout || 30000;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get all supported assets for bridge deposits
|
|
70
|
+
*
|
|
71
|
+
* @returns Array of supported assets with their chain/token details
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const assets = await bridge.getSupportedAssets();
|
|
76
|
+
* for (const asset of assets) {
|
|
77
|
+
* console.log(`${asset.chainName} ${asset.tokenSymbol}: min $${asset.minDepositUsd}`);
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
async getSupportedAssets() {
|
|
82
|
+
const response = await this.fetch('/supported-assets');
|
|
83
|
+
// Normalize the API response to match our interface
|
|
84
|
+
return response.supportedAssets.map((asset) => ({
|
|
85
|
+
chainId: parseInt(asset.chainId, 10),
|
|
86
|
+
chainName: asset.chainName,
|
|
87
|
+
tokenSymbol: asset.token.symbol,
|
|
88
|
+
tokenName: asset.token.name,
|
|
89
|
+
tokenAddress: asset.token.address,
|
|
90
|
+
decimals: asset.token.decimals,
|
|
91
|
+
minDeposit: asset.minCheckoutUsd.toString(),
|
|
92
|
+
minDepositUsd: asset.minCheckoutUsd,
|
|
93
|
+
active: true,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get unique deposit addresses for a Polymarket wallet
|
|
98
|
+
*
|
|
99
|
+
* The Bridge API returns a universal deposit address structure:
|
|
100
|
+
* - A single EVM address works for ALL EVM chains (Ethereum, Polygon, Arbitrum, Base, Optimism)
|
|
101
|
+
* - A Solana address for SVM deposits
|
|
102
|
+
* - A Bitcoin address for BTC deposits
|
|
103
|
+
*
|
|
104
|
+
* Funds sent to these addresses are automatically bridged to Polygon
|
|
105
|
+
* and converted to USDC.e for your Polymarket account.
|
|
106
|
+
*
|
|
107
|
+
* @param walletAddress - Your Polymarket wallet address (EOA address)
|
|
108
|
+
* @returns Universal deposit addresses for EVM, Solana, and Bitcoin
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* const result = await bridge.createDepositAddresses('0xYourPolymarketWallet');
|
|
113
|
+
*
|
|
114
|
+
* // The EVM address works for Ethereum, Polygon, Arbitrum, Base, Optimism
|
|
115
|
+
* console.log(`EVM deposit address: ${result.address.evm}`);
|
|
116
|
+
*
|
|
117
|
+
* // For Solana deposits
|
|
118
|
+
* console.log(`Solana deposit address: ${result.address.svm}`);
|
|
119
|
+
*
|
|
120
|
+
* // For Bitcoin deposits
|
|
121
|
+
* console.log(`Bitcoin deposit address: ${result.address.btc}`);
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
async createDepositAddresses(walletAddress) {
|
|
125
|
+
const response = await this.fetch('/deposit', {
|
|
126
|
+
method: 'POST',
|
|
127
|
+
body: JSON.stringify({ address: walletAddress }),
|
|
128
|
+
});
|
|
129
|
+
return response;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get the EVM deposit address for a wallet
|
|
133
|
+
*
|
|
134
|
+
* This address works for ALL supported EVM chains:
|
|
135
|
+
* - Ethereum (chainId: 1)
|
|
136
|
+
* - Polygon (chainId: 137)
|
|
137
|
+
* - Arbitrum (chainId: 42161)
|
|
138
|
+
* - Base (chainId: 8453)
|
|
139
|
+
* - Optimism (chainId: 10)
|
|
140
|
+
*
|
|
141
|
+
* @param walletAddress - Your Polymarket wallet address
|
|
142
|
+
* @returns The universal EVM deposit address
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* const evmAddr = await bridge.getEvmDepositAddress('0xYourWallet');
|
|
147
|
+
* // Send Native USDC on Polygon to this address
|
|
148
|
+
* // Or send USDC on Ethereum to this address
|
|
149
|
+
* console.log(`Deposit to: ${evmAddr}`);
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
async getEvmDepositAddress(walletAddress) {
|
|
153
|
+
const result = await this.createDepositAddresses(walletAddress);
|
|
154
|
+
return result.address.evm;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get the Solana deposit address for a wallet
|
|
158
|
+
*
|
|
159
|
+
* @param walletAddress - Your Polymarket wallet address
|
|
160
|
+
* @returns The Solana deposit address
|
|
161
|
+
*/
|
|
162
|
+
async getSolanaDepositAddress(walletAddress) {
|
|
163
|
+
const result = await this.createDepositAddresses(walletAddress);
|
|
164
|
+
return result.address.svm;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get the Bitcoin deposit address for a wallet
|
|
168
|
+
*
|
|
169
|
+
* @param walletAddress - Your Polymarket wallet address
|
|
170
|
+
* @returns The Bitcoin deposit address
|
|
171
|
+
*/
|
|
172
|
+
async getBtcDepositAddress(walletAddress) {
|
|
173
|
+
const result = await this.createDepositAddresses(walletAddress);
|
|
174
|
+
return result.address.btc;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* @deprecated Use getEvmDepositAddress(), getSolanaDepositAddress(), or getBtcDepositAddress() instead.
|
|
178
|
+
*
|
|
179
|
+
* The Bridge API returns universal addresses by chain type (EVM/SVM/BTC),
|
|
180
|
+
* not by specific chain/token combinations.
|
|
181
|
+
*
|
|
182
|
+
* For EVM chains (Ethereum, Polygon, Arbitrum, Base, Optimism), use getEvmDepositAddress()
|
|
183
|
+
*/
|
|
184
|
+
async getDepositAddress(address, _chainId, _tokenSymbol) {
|
|
185
|
+
// Return a compatibility shim - the EVM address works for all EVM chains
|
|
186
|
+
const result = await this.createDepositAddresses(address);
|
|
187
|
+
return {
|
|
188
|
+
chainId: _chainId,
|
|
189
|
+
chainName: 'Universal EVM',
|
|
190
|
+
tokenAddress: '',
|
|
191
|
+
tokenSymbol: _tokenSymbol,
|
|
192
|
+
depositAddress: result.address.evm,
|
|
193
|
+
minDeposit: '2', // Default minimum
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Check if a chain/token combination is supported
|
|
198
|
+
*
|
|
199
|
+
* @param chainId - The chain ID to check
|
|
200
|
+
* @param tokenSymbol - The token symbol to check
|
|
201
|
+
* @returns True if supported, false otherwise
|
|
202
|
+
*/
|
|
203
|
+
async isSupported(chainId, tokenSymbol) {
|
|
204
|
+
const assets = await this.getSupportedAssets();
|
|
205
|
+
return assets.some((a) => a.chainId === chainId && a.tokenSymbol.toUpperCase() === tokenSymbol.toUpperCase());
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get minimum deposit amount for a chain/token
|
|
209
|
+
*
|
|
210
|
+
* @param chainId - The chain ID
|
|
211
|
+
* @param tokenSymbol - The token symbol
|
|
212
|
+
* @returns Minimum deposit info or null if not supported
|
|
213
|
+
*/
|
|
214
|
+
async getMinDeposit(chainId, tokenSymbol) {
|
|
215
|
+
const assets = await this.getSupportedAssets();
|
|
216
|
+
const asset = assets.find((a) => a.chainId === chainId && a.tokenSymbol.toUpperCase() === tokenSymbol.toUpperCase());
|
|
217
|
+
if (!asset)
|
|
218
|
+
return null;
|
|
219
|
+
return {
|
|
220
|
+
amount: asset.minDeposit,
|
|
221
|
+
usd: asset.minDepositUsd,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Format deposit instructions for a user
|
|
226
|
+
*
|
|
227
|
+
* @param walletAddress - The Polymarket wallet address
|
|
228
|
+
* @returns Formatted instructions string
|
|
229
|
+
*/
|
|
230
|
+
async getDepositInstructions(walletAddress) {
|
|
231
|
+
const result = await this.createDepositAddresses(walletAddress);
|
|
232
|
+
const assets = await this.getSupportedAssets();
|
|
233
|
+
const lines = [
|
|
234
|
+
'═══════════════════════════════════════════════════════════',
|
|
235
|
+
' POLYMARKET DEPOSIT INSTRUCTIONS',
|
|
236
|
+
'═══════════════════════════════════════════════════════════',
|
|
237
|
+
'',
|
|
238
|
+
`Wallet: ${walletAddress}`,
|
|
239
|
+
'',
|
|
240
|
+
'Send assets to these addresses to deposit to your Polymarket account:',
|
|
241
|
+
'(Assets will be automatically converted to USDC.e on Polygon)',
|
|
242
|
+
'',
|
|
243
|
+
];
|
|
244
|
+
// EVM Deposit Address (works for all EVM chains)
|
|
245
|
+
lines.push('── EVM CHAINS ──');
|
|
246
|
+
lines.push('(Ethereum, Polygon, Arbitrum, Base, Optimism)');
|
|
247
|
+
lines.push('');
|
|
248
|
+
lines.push(` Universal EVM Address: ${result.address.evm}`);
|
|
249
|
+
lines.push('');
|
|
250
|
+
// Group assets by chain for display
|
|
251
|
+
const evmChainIds = [1, 137, 42161, 8453, 10];
|
|
252
|
+
const evmAssets = assets.filter((a) => evmChainIds.includes(a.chainId));
|
|
253
|
+
// Group by chain
|
|
254
|
+
const byChain = new Map();
|
|
255
|
+
for (const asset of evmAssets) {
|
|
256
|
+
const existing = byChain.get(asset.chainId) || [];
|
|
257
|
+
existing.push(asset);
|
|
258
|
+
byChain.set(asset.chainId, existing);
|
|
259
|
+
}
|
|
260
|
+
for (const [chainId, chainAssets] of byChain) {
|
|
261
|
+
const chainName = chainAssets[0]?.chainName || `Chain ${chainId}`;
|
|
262
|
+
lines.push(` ${chainName} (${chainId}):`);
|
|
263
|
+
for (const asset of chainAssets) {
|
|
264
|
+
lines.push(` - ${asset.tokenSymbol}: min $${asset.minDepositUsd}`);
|
|
265
|
+
}
|
|
266
|
+
lines.push('');
|
|
267
|
+
}
|
|
268
|
+
// Solana Deposit Address
|
|
269
|
+
lines.push('── SOLANA ──');
|
|
270
|
+
lines.push(` Address: ${result.address.svm}`);
|
|
271
|
+
const solAssets = assets.filter((a) => a.chainName?.toLowerCase().includes('solana'));
|
|
272
|
+
for (const asset of solAssets) {
|
|
273
|
+
lines.push(` - ${asset.tokenSymbol}: min $${asset.minDepositUsd}`);
|
|
274
|
+
}
|
|
275
|
+
lines.push('');
|
|
276
|
+
// Bitcoin Deposit Address
|
|
277
|
+
lines.push('── BITCOIN ──');
|
|
278
|
+
lines.push(` Address: ${result.address.btc}`);
|
|
279
|
+
const btcAssets = assets.filter((a) => a.chainName?.toLowerCase().includes('bitcoin'));
|
|
280
|
+
for (const asset of btcAssets) {
|
|
281
|
+
lines.push(` - ${asset.tokenSymbol}: min $${asset.minDepositUsd}`);
|
|
282
|
+
}
|
|
283
|
+
lines.push('');
|
|
284
|
+
lines.push('═══════════════════════════════════════════════════════════');
|
|
285
|
+
lines.push('');
|
|
286
|
+
lines.push('IMPORTANT:');
|
|
287
|
+
lines.push(' - Always send more than the minimum amount');
|
|
288
|
+
lines.push(' - Deposits may take 1-30 minutes to process');
|
|
289
|
+
lines.push(' - Check Polymarket balance after deposit completes');
|
|
290
|
+
lines.push(' - Bridge fee is approximately 0.16%');
|
|
291
|
+
lines.push('');
|
|
292
|
+
return lines.join('\n');
|
|
293
|
+
}
|
|
294
|
+
// ===== Private Methods =====
|
|
295
|
+
async fetch(path, options = {}) {
|
|
296
|
+
const url = `${this.baseUrl}${path}`;
|
|
297
|
+
const controller = new AbortController();
|
|
298
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
299
|
+
try {
|
|
300
|
+
const response = await fetch(url, {
|
|
301
|
+
...options,
|
|
302
|
+
headers: {
|
|
303
|
+
'Content-Type': 'application/json',
|
|
304
|
+
...options.headers,
|
|
305
|
+
},
|
|
306
|
+
signal: controller.signal,
|
|
307
|
+
});
|
|
308
|
+
if (!response.ok) {
|
|
309
|
+
const errorText = await response.text();
|
|
310
|
+
throw new Error(`Bridge API error (${response.status}): ${errorText}`);
|
|
311
|
+
}
|
|
312
|
+
return await response.json();
|
|
313
|
+
}
|
|
314
|
+
finally {
|
|
315
|
+
clearTimeout(timeoutId);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// ===== Deposit Execution =====
|
|
320
|
+
import { ethers } from 'ethers';
|
|
321
|
+
// ERC20 ABI for deposits
|
|
322
|
+
const ERC20_DEPOSIT_ABI = [
|
|
323
|
+
'function balanceOf(address owner) view returns (uint256)',
|
|
324
|
+
'function transfer(address to, uint256 amount) returns (bool)',
|
|
325
|
+
];
|
|
326
|
+
/**
|
|
327
|
+
* Deposit USDC to Polymarket via Bridge
|
|
328
|
+
*
|
|
329
|
+
* This function:
|
|
330
|
+
* 1. Gets the deposit address for your wallet
|
|
331
|
+
* 2. Transfers USDC to that address
|
|
332
|
+
* 3. The bridge automatically converts it to USDC.e for your Polymarket account
|
|
333
|
+
*
|
|
334
|
+
* @param signer - Ethers wallet/signer to send from
|
|
335
|
+
* @param amount - Amount in USDC (e.g., 10.5 for $10.50)
|
|
336
|
+
* @param options - Deposit options
|
|
337
|
+
* @returns Deposit result with transaction hash
|
|
338
|
+
*
|
|
339
|
+
* @example
|
|
340
|
+
* ```typescript
|
|
341
|
+
* const bridge = new BridgeClient();
|
|
342
|
+
* const result = await bridge.depositUsdc(signer, 100);
|
|
343
|
+
* console.log(`Deposited $100: ${result.txHash}`);
|
|
344
|
+
* ```
|
|
345
|
+
*/
|
|
346
|
+
export async function depositUsdc(signer, amount, options = {}) {
|
|
347
|
+
const { token = 'NATIVE_USDC', gasPriceMultiplier = 1.2 } = options;
|
|
348
|
+
// Validate minimum deposit
|
|
349
|
+
if (amount < 2) {
|
|
350
|
+
return {
|
|
351
|
+
success: false,
|
|
352
|
+
amount: amount.toString(),
|
|
353
|
+
depositAddress: '',
|
|
354
|
+
error: 'Minimum deposit is $2',
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
// Get token address
|
|
358
|
+
const tokenAddress = token === 'NATIVE_USDC' ? BRIDGE_TOKENS.POLYGON_NATIVE_USDC : BRIDGE_TOKENS.POLYGON_USDC_E;
|
|
359
|
+
try {
|
|
360
|
+
// Get deposit address
|
|
361
|
+
const bridge = new BridgeClient();
|
|
362
|
+
const depositAddr = await bridge.getEvmDepositAddress(signer.address);
|
|
363
|
+
// Create token contract
|
|
364
|
+
const tokenContract = new ethers.Contract(tokenAddress, ERC20_DEPOSIT_ABI, signer);
|
|
365
|
+
// Check balance
|
|
366
|
+
const balance = await tokenContract.balanceOf(signer.address);
|
|
367
|
+
const amountWei = ethers.utils.parseUnits(amount.toString(), 6);
|
|
368
|
+
if (balance.lt(amountWei)) {
|
|
369
|
+
const balanceFormatted = ethers.utils.formatUnits(balance, 6);
|
|
370
|
+
return {
|
|
371
|
+
success: false,
|
|
372
|
+
amount: amount.toString(),
|
|
373
|
+
depositAddress: depositAddr,
|
|
374
|
+
error: `Insufficient balance. Have: ${balanceFormatted}, Need: ${amount}`,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
// Get gas price with buffer
|
|
378
|
+
const feeData = await signer.provider.getFeeData();
|
|
379
|
+
const gasPrice = feeData.gasPrice
|
|
380
|
+
? feeData.gasPrice.mul(Math.floor(gasPriceMultiplier * 100)).div(100)
|
|
381
|
+
: undefined;
|
|
382
|
+
// Execute transfer
|
|
383
|
+
const tx = await tokenContract.transfer(depositAddr, amountWei, {
|
|
384
|
+
gasPrice,
|
|
385
|
+
});
|
|
386
|
+
const receipt = await tx.wait();
|
|
387
|
+
if (receipt.status !== 1) {
|
|
388
|
+
return {
|
|
389
|
+
success: false,
|
|
390
|
+
txHash: tx.hash,
|
|
391
|
+
amount: amount.toString(),
|
|
392
|
+
depositAddress: depositAddr,
|
|
393
|
+
error: 'Transaction failed',
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
return {
|
|
397
|
+
success: true,
|
|
398
|
+
txHash: tx.hash,
|
|
399
|
+
amount: amount.toString(),
|
|
400
|
+
depositAddress: depositAddr,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
catch (err) {
|
|
404
|
+
return {
|
|
405
|
+
success: false,
|
|
406
|
+
amount: amount.toString(),
|
|
407
|
+
depositAddress: '',
|
|
408
|
+
error: err instanceof Error ? err.message : 'Unknown error',
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
// ===== Swap and Deposit =====
|
|
413
|
+
import { SwapService, POLYGON_TOKENS } from '../services/swap-service.js';
|
|
414
|
+
/**
|
|
415
|
+
* Swap any supported Polygon token to USDC and deposit to Polymarket
|
|
416
|
+
*
|
|
417
|
+
* Supported tokens: MATIC, WMATIC, USDC, USDC_E, USDT, DAI, WETH
|
|
418
|
+
*
|
|
419
|
+
* Flow:
|
|
420
|
+
* 1. If token is not USDC, swap to USDC using QuickSwap
|
|
421
|
+
* 2. Deposit USDC to the bridge deposit address
|
|
422
|
+
*
|
|
423
|
+
* @param signer - Ethers wallet/signer
|
|
424
|
+
* @param token - Token symbol to deposit (e.g., 'MATIC', 'WETH', 'USDT')
|
|
425
|
+
* @param amount - Amount to deposit in token units
|
|
426
|
+
* @param options - Swap and deposit options
|
|
427
|
+
* @returns Result with transaction hashes
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* ```typescript
|
|
431
|
+
* // Deposit 10 MATIC
|
|
432
|
+
* const result = await swapAndDeposit(signer, 'MATIC', '10');
|
|
433
|
+
*
|
|
434
|
+
* // Deposit 100 USDT
|
|
435
|
+
* const result = await swapAndDeposit(signer, 'USDT', '100');
|
|
436
|
+
*
|
|
437
|
+
* // Deposit 0.1 WETH
|
|
438
|
+
* const result = await swapAndDeposit(signer, 'WETH', '0.1');
|
|
439
|
+
* ```
|
|
440
|
+
*/
|
|
441
|
+
export async function swapAndDeposit(signer, token, amount, options = {}) {
|
|
442
|
+
const { slippage = 0.5, gasPriceMultiplier = 1.2 } = options;
|
|
443
|
+
const upperToken = token.toUpperCase();
|
|
444
|
+
try {
|
|
445
|
+
const swapService = new SwapService(signer);
|
|
446
|
+
const bridge = new BridgeClient();
|
|
447
|
+
// Get deposit address
|
|
448
|
+
const depositAddr = await bridge.getEvmDepositAddress(signer.address);
|
|
449
|
+
// If already USDC, skip swap
|
|
450
|
+
if (upperToken === 'USDC' || upperToken === 'NATIVE_USDC') {
|
|
451
|
+
const result = await depositUsdc(signer, parseFloat(amount), {
|
|
452
|
+
token: 'NATIVE_USDC',
|
|
453
|
+
gasPriceMultiplier,
|
|
454
|
+
});
|
|
455
|
+
return {
|
|
456
|
+
success: result.success,
|
|
457
|
+
depositTxHash: result.txHash,
|
|
458
|
+
tokenIn: upperToken,
|
|
459
|
+
amountIn: amount,
|
|
460
|
+
usdcAmount: amount,
|
|
461
|
+
depositAddress: depositAddr,
|
|
462
|
+
error: result.error,
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
if (upperToken === 'USDC_E') {
|
|
466
|
+
const result = await depositUsdc(signer, parseFloat(amount), {
|
|
467
|
+
token: 'USDC_E',
|
|
468
|
+
gasPriceMultiplier,
|
|
469
|
+
});
|
|
470
|
+
return {
|
|
471
|
+
success: result.success,
|
|
472
|
+
depositTxHash: result.txHash,
|
|
473
|
+
tokenIn: upperToken,
|
|
474
|
+
amountIn: amount,
|
|
475
|
+
usdcAmount: amount,
|
|
476
|
+
depositAddress: depositAddr,
|
|
477
|
+
error: result.error,
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
// Check balance
|
|
481
|
+
const balance = await swapService.getBalance(token);
|
|
482
|
+
if (parseFloat(balance) < parseFloat(amount)) {
|
|
483
|
+
return {
|
|
484
|
+
success: false,
|
|
485
|
+
tokenIn: upperToken,
|
|
486
|
+
amountIn: amount,
|
|
487
|
+
usdcAmount: '0',
|
|
488
|
+
depositAddress: depositAddr,
|
|
489
|
+
error: `Insufficient ${upperToken} balance. Have: ${balance}, Need: ${amount}`,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
// Swap to USDC
|
|
493
|
+
const swapResult = await swapService.swapToUsdc(token, amount, {
|
|
494
|
+
usdcType: 'NATIVE_USDC',
|
|
495
|
+
slippage,
|
|
496
|
+
});
|
|
497
|
+
if (!swapResult.success) {
|
|
498
|
+
return {
|
|
499
|
+
success: false,
|
|
500
|
+
tokenIn: upperToken,
|
|
501
|
+
amountIn: amount,
|
|
502
|
+
usdcAmount: '0',
|
|
503
|
+
depositAddress: depositAddr,
|
|
504
|
+
error: `Swap failed: ${swapResult.transactionHash}`,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
// Get USDC balance after swap
|
|
508
|
+
const usdcBalance = await swapService.getBalance('USDC');
|
|
509
|
+
// Deposit USDC
|
|
510
|
+
const depositResult = await depositUsdc(signer, parseFloat(usdcBalance), {
|
|
511
|
+
token: 'NATIVE_USDC',
|
|
512
|
+
gasPriceMultiplier,
|
|
513
|
+
});
|
|
514
|
+
return {
|
|
515
|
+
success: depositResult.success,
|
|
516
|
+
swapTxHash: swapResult.transactionHash,
|
|
517
|
+
depositTxHash: depositResult.txHash,
|
|
518
|
+
tokenIn: upperToken,
|
|
519
|
+
amountIn: amount,
|
|
520
|
+
usdcAmount: usdcBalance,
|
|
521
|
+
depositAddress: depositAddr,
|
|
522
|
+
error: depositResult.error,
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
catch (err) {
|
|
526
|
+
return {
|
|
527
|
+
success: false,
|
|
528
|
+
tokenIn: upperToken,
|
|
529
|
+
amountIn: amount,
|
|
530
|
+
usdcAmount: '0',
|
|
531
|
+
depositAddress: '',
|
|
532
|
+
error: err instanceof Error ? err.message : 'Unknown error',
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Get list of supported tokens for swap and deposit
|
|
538
|
+
*/
|
|
539
|
+
export function getSupportedDepositTokens() {
|
|
540
|
+
return Object.keys(POLYGON_TOKENS);
|
|
541
|
+
}
|
|
542
|
+
// ===== Utility Functions =====
|
|
543
|
+
/**
|
|
544
|
+
* Calculate the expected USDC.e output after bridge fees
|
|
545
|
+
*
|
|
546
|
+
* Note: This is an estimate. Actual output depends on bridge/swap fees.
|
|
547
|
+
*
|
|
548
|
+
* @param amount - Input amount in source token
|
|
549
|
+
* @param tokenSymbol - Source token symbol
|
|
550
|
+
* @returns Estimated USDC.e output
|
|
551
|
+
*/
|
|
552
|
+
export function estimateBridgeOutput(amount, tokenSymbol) {
|
|
553
|
+
// Typical bridge fees: ~0.5-1%
|
|
554
|
+
// Swap fees: ~0.3%
|
|
555
|
+
const totalFeePercent = 0.01; // 1% estimate
|
|
556
|
+
// For stablecoins, 1:1 minus fees
|
|
557
|
+
if (['USDC', 'USDT', 'DAI', 'BUSD'].includes(tokenSymbol.toUpperCase())) {
|
|
558
|
+
return amount * (1 - totalFeePercent);
|
|
559
|
+
}
|
|
560
|
+
// For ETH and other tokens, would need price oracle
|
|
561
|
+
// This is just a placeholder
|
|
562
|
+
return amount * (1 - totalFeePercent);
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Get explorer URL for a deposit transaction
|
|
566
|
+
*
|
|
567
|
+
* @param chainId - The chain ID
|
|
568
|
+
* @param txHash - The transaction hash
|
|
569
|
+
* @returns Block explorer URL
|
|
570
|
+
*/
|
|
571
|
+
export function getExplorerUrl(chainId, txHash) {
|
|
572
|
+
switch (chainId) {
|
|
573
|
+
case 1:
|
|
574
|
+
return `https://etherscan.io/tx/${txHash}`;
|
|
575
|
+
case 137:
|
|
576
|
+
return `https://polygonscan.com/tx/${txHash}`;
|
|
577
|
+
case 10:
|
|
578
|
+
return `https://optimistic.etherscan.io/tx/${txHash}`;
|
|
579
|
+
case 42161:
|
|
580
|
+
return `https://arbiscan.io/tx/${txHash}`;
|
|
581
|
+
case 8453:
|
|
582
|
+
return `https://basescan.org/tx/${txHash}`;
|
|
583
|
+
default:
|
|
584
|
+
return `https://blockscan.com/tx/${txHash}`;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
//# sourceMappingURL=bridge-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-client.js","sourceRoot":"","sources":["../../src/clients/bridge-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiHH,wBAAwB;AAExB,MAAM,eAAe,GAAG,+BAA+B,CAAC;AAExD,0BAA0B;AAC1B,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,0BAA0B;KACnC;IACD,OAAO,EAAE;QACP,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,yBAAyB;KAClC;CACO,CAAC;AAEX,wBAAwB;AACxB,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,QAAQ,EAAE,4CAA4C;IACtD,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,4CAA4C;IAErD,wBAAwB;IACxB,cAAc,EAAE,4CAA4C;IAC5D,mBAAmB,EAAE,4CAA4C;CACzD,CAAC;AAEX,4BAA4B;AAE5B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,YAAY;IACf,OAAO,CAAS;IAChB,OAAO,CAAS;IAExB,YAAY,SAAuB,EAAE;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAYpD,CAAC;QAEF,oDAAoD;QACpD,OAAO,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACpC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;YAC/B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;YAC3B,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;YACjC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;YAC9B,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE;YAC3C,aAAa,EAAE,KAAK,CAAC,cAAc;YACnC,MAAM,EAAE,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,KAAK,CAAC,sBAAsB,CAAC,aAAqB;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;SACjD,CAAC,CAAC;QAEH,OAAO,QAAiC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,oBAAoB,CAAC,aAAqB;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,uBAAuB,CAAC,aAAqB;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CAAC,aAAqB;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,iBAAiB,CACrB,OAAe,EACf,QAAgB,EAChB,YAAoB;QAEpB,yEAAyE;QACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,eAAe;YAC1B,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,YAAY;YACzB,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;YAClC,UAAU,EAAE,GAAG,EAAE,kBAAkB;SACpC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,WAAmB;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAC1F,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CACjB,OAAe,EACf,WAAmB;QAEnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAC1F,CAAC;QAEF,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,GAAG,EAAE,KAAK,CAAC,aAAa;SACzB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,sBAAsB,CAAC,aAAqB;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE/C,MAAM,KAAK,GAAa;YACtB,6DAA6D;YAC7D,6CAA6C;YAC7C,6DAA6D;YAC7D,EAAE;YACF,WAAW,aAAa,EAAE;YAC1B,EAAE;YACF,uEAAuE;YACvE,+DAA+D;YAC/D,EAAE;SACH,CAAC;QAEF,iDAAiD;QACjD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,oCAAoC;QACpC,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAExE,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,SAAS,OAAO,EAAE,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC;YAC3C,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,WAAW,UAAU,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,yBAAyB;QACzB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,WAAW,UAAU,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,0BAA0B;QAC1B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACvF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,WAAW,UAAU,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,8BAA8B;IAEtB,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,UAAuB,EAAE;QACzD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAErC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,GAAG,OAAO;gBACV,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,OAAO,CAAC,OAAO;iBACnB;gBACD,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAED,gCAAgC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,yBAAyB;AACzB,MAAM,iBAAiB,GAAG;IACxB,0DAA0D;IAC1D,8DAA8D;CAC/D,CAAC;AAmBF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAqB,EACrB,MAAc,EACd,UAA0B,EAAE;IAE5B,MAAM,EAAE,KAAK,GAAG,aAAa,EAAE,kBAAkB,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IAEpE,2BAA2B;IAC3B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;YACzB,cAAc,EAAE,EAAE;YAClB,KAAK,EAAE,uBAAuB;SAC/B,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,MAAM,YAAY,GAChB,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC;IAE7F,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEtE,wBAAwB;QACxB,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAEnF,gBAAgB;QAChB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAEhE,IAAI,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACzB,cAAc,EAAE,WAAW;gBAC3B,KAAK,EAAE,+BAA+B,gBAAgB,WAAW,MAAM,EAAE;aAC1E,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAS,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;YAC/B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YACrE,CAAC,CAAC,SAAS,CAAC;QAEd,mBAAmB;QACnB,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE;YAC9D,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE,CAAC,IAAI;gBACf,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACzB,cAAc,EAAE,WAAW;gBAC3B,KAAK,EAAE,oBAAoB;aAC5B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE,CAAC,IAAI;YACf,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;YACzB,cAAc,EAAE,WAAW;SAC5B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;YACzB,cAAc,EAAE,EAAE;YAClB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAC5D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+BAA+B;AAE/B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAkB,MAAM,6BAA6B,CAAC;AA2B1F;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAqB,EACrB,KAAa,EACb,MAAc,EACd,UAAiC,EAAE;IAEnC,MAAM,EAAE,QAAQ,GAAG,GAAG,EAAE,kBAAkB,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IAE7D,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAElC,sBAAsB;QACtB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEtE,6BAA6B;QAC7B,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE;gBAC3D,KAAK,EAAE,aAAa;gBACpB,kBAAkB;aACnB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,MAAM;gBAC5B,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,MAAM;gBAClB,cAAc,EAAE,WAAW;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE;gBAC3D,KAAK,EAAE,QAAQ;gBACf,kBAAkB;aACnB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,MAAM;gBAC5B,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,MAAM;gBAClB,cAAc,EAAE,WAAW;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,GAAG;gBACf,cAAc,EAAE,WAAW;gBAC3B,KAAK,EAAE,gBAAgB,UAAU,mBAAmB,OAAO,WAAW,MAAM,EAAE;aAC/E,CAAC;QACJ,CAAC;QAED,eAAe;QACf,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;YAC7D,QAAQ,EAAE,aAAa;YACvB,QAAQ;SACT,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,GAAG;gBACf,cAAc,EAAE,WAAW;gBAC3B,KAAK,EAAE,gBAAgB,UAAU,CAAC,eAAe,EAAE;aACpD,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEzD,eAAe;QACf,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE;YACvE,KAAK,EAAE,aAAa;YACpB,kBAAkB;SACnB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,UAAU,EAAE,UAAU,CAAC,eAAe;YACtC,aAAa,EAAE,aAAa,CAAC,MAAM;YACnC,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,WAAW;YACvB,cAAc,EAAE,WAAW;YAC3B,KAAK,EAAE,aAAa,CAAC,KAAK;SAC3B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,GAAG;YACf,cAAc,EAAE,EAAE;YAClB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAC5D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC;AAED,gCAAgC;AAEhC;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,WAAmB;IACtE,+BAA+B;IAC/B,mBAAmB;IACnB,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,cAAc;IAE5C,kCAAkC;IAClC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACxE,OAAO,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,oDAAoD;IACpD,6BAA6B;IAC7B,OAAO,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,MAAc;IAC5D,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,CAAC;YACJ,OAAO,2BAA2B,MAAM,EAAE,CAAC;QAC7C,KAAK,GAAG;YACN,OAAO,8BAA8B,MAAM,EAAE,CAAC;QAChD,KAAK,EAAE;YACL,OAAO,sCAAsC,MAAM,EAAE,CAAC;QACxD,KAAK,KAAK;YACR,OAAO,0BAA0B,MAAM,EAAE,CAAC;QAC5C,KAAK,IAAI;YACP,OAAO,2BAA2B,MAAM,EAAE,CAAC;QAC7C;YACE,OAAO,4BAA4B,MAAM,EAAE,CAAC;IAChD,CAAC;AACH,CAAC"}
|