paybot-mcp 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +189 -189
- package/README.md +193 -109
- package/dist/server.d.ts +9 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +391 -12
- package/dist/server.js.map +1 -1
- package/package.json +93 -87
package/dist/server.js
CHANGED
|
@@ -1,19 +1,57 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
2
3
|
import { z } from 'zod';
|
|
3
|
-
import { PayBotClient, PayBotApiError } from 'paybot-sdk';
|
|
4
|
+
import { PayBotClient, PayBotApiError, PayBotClientPool, getSupportedNetworks, getNetwork, getSupportedTokens, getToken, getTokenAddress, } from 'paybot-sdk';
|
|
5
|
+
/**
|
|
6
|
+
* Single source of truth for the served version.
|
|
7
|
+
*
|
|
8
|
+
* Read from package.json at runtime so the MCP handshake version can never
|
|
9
|
+
* drift from the published package version. `createRequire` resolves
|
|
10
|
+
* `../package.json` relative to the compiled `dist/server.js` (one level above
|
|
11
|
+
* dist/) as well as `src/server.ts` (one level above src/) — package.json sits
|
|
12
|
+
* at the repo root in both layouts. Reading at runtime (rather than a JSON
|
|
13
|
+
* import) keeps package.json outside tsconfig's `rootDir: ./src`.
|
|
14
|
+
*/
|
|
15
|
+
const require = createRequire(import.meta.url);
|
|
16
|
+
const { version: PACKAGE_VERSION } = require('../package.json');
|
|
17
|
+
/**
|
|
18
|
+
* Derive a network-correct block-explorer transaction URL from the public
|
|
19
|
+
* networks registry.
|
|
20
|
+
*
|
|
21
|
+
* The earlier implementation hardcoded `sepolia.basescan.org` for every
|
|
22
|
+
* network, which produced wrong links for any non-Base-Sepolia payment. This
|
|
23
|
+
* resolves the explorer base from {@link getNetwork} so each network's tx link
|
|
24
|
+
* points at the right explorer (e.g. Optimism → optimistic.etherscan.io).
|
|
25
|
+
*
|
|
26
|
+
* @param network - CAIP-2 network id (e.g. `'eip155:84532'`). When undefined or
|
|
27
|
+
* unknown, falls back to Base Sepolia for backward compatibility.
|
|
28
|
+
* @param txHash - The transaction hash to link to.
|
|
29
|
+
* @returns A fully-qualified explorer URL for the transaction.
|
|
30
|
+
*/
|
|
31
|
+
function explorerTxUrl(network, txHash) {
|
|
32
|
+
const cfg = network ? getNetwork(network) : undefined;
|
|
33
|
+
const base = cfg?.explorerUrl ?? 'https://sepolia.basescan.org';
|
|
34
|
+
return `${base.replace(/\/$/, '')}/tx/${txHash}`;
|
|
35
|
+
}
|
|
4
36
|
/**
|
|
5
37
|
* Create a PayBot MCP server exposing payment tools to AI agents.
|
|
6
38
|
*
|
|
7
|
-
* Tools:
|
|
8
|
-
* - paybot_pay — make a USDC
|
|
39
|
+
* Tools (v0.3.0):
|
|
40
|
+
* - paybot_pay — make a payment (USDC default; optional token + idempotencyKey)
|
|
9
41
|
* - paybot_balance — check spending limits and budget
|
|
10
42
|
* - paybot_history — view recent payment history
|
|
11
|
-
* - paybot_register — register a new bot
|
|
43
|
+
* - paybot_register — register a new bot (optional idempotencyKey)
|
|
44
|
+
* - paybot_list_networks_and_tokens — discover supported networks/tokens (offline, public registry only)
|
|
45
|
+
* - paybot_health_extended — facilitator health (status/version/uptime + extras)
|
|
46
|
+
* - paybot_set_spending_limit — tighten an agent's own spending limits
|
|
47
|
+
* - paybot_commission_inspect — commission summary + ledger
|
|
48
|
+
* - paybot_pool_create / paybot_pool_allocate / paybot_pool_revoke / paybot_pool_status —
|
|
49
|
+
* in-process multi-bot pool with a shared daily treasury
|
|
12
50
|
*/
|
|
13
51
|
export function createMcpServer() {
|
|
14
52
|
const server = new McpServer({
|
|
15
53
|
name: 'paybot',
|
|
16
|
-
version:
|
|
54
|
+
version: PACKAGE_VERSION,
|
|
17
55
|
});
|
|
18
56
|
// Shared client — lazily created per-request from env
|
|
19
57
|
function getClient(botId) {
|
|
@@ -29,20 +67,32 @@ export function createMcpServer() {
|
|
|
29
67
|
walletPrivateKey: process.env.PAYBOT_WALLET_KEY,
|
|
30
68
|
});
|
|
31
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* In-process pool registry for the lifetime of this MCP server (one stdio
|
|
72
|
+
* session). MCP stdio servers are single-session and stateless across runs,
|
|
73
|
+
* so a pool created here lives only for the session and its shared-treasury
|
|
74
|
+
* accounting is in-memory; the facilitator remains the authoritative limit.
|
|
75
|
+
* Keyed by a caller-chosen pool id so an orchestrator can run more than one.
|
|
76
|
+
*/
|
|
77
|
+
const pools = new Map();
|
|
32
78
|
// --- paybot_pay ---
|
|
33
|
-
server.tool('paybot_pay', 'Make a USDC
|
|
79
|
+
server.tool('paybot_pay', 'Make a payment (USDC by default) for an API, service, or resource. Returns transaction hash and commission breakdown. Supports alternate tokens and idempotency.', {
|
|
34
80
|
amount: z.string().describe('Amount in USD (e.g., "0.05" for 5 cents)'),
|
|
35
81
|
recipient: z.string().describe('Recipient wallet address (0x...)'),
|
|
36
82
|
resource: z.string().describe('URL or description of what you are paying for'),
|
|
37
83
|
botId: z.string().optional().describe('Bot identifier (defaults to env PAYBOT_BOT_ID)'),
|
|
38
84
|
network: z.string().optional().describe('Network CAIP-2 ID (default: eip155:84532 Base Sepolia)'),
|
|
39
|
-
|
|
85
|
+
token: z.string().optional().describe('Token ticker to pay with (default: USDC). e.g. USDC, EURC, DAI'),
|
|
86
|
+
idempotencyKey: z.string().optional().describe('Optional idempotency key; a repeat call with the same key returns the cached result'),
|
|
87
|
+
}, async ({ amount, recipient, resource, botId, network, token, idempotencyKey }) => {
|
|
40
88
|
const client = getClient(botId);
|
|
41
89
|
const result = await client.pay({
|
|
42
90
|
resource,
|
|
43
91
|
amount,
|
|
44
92
|
payTo: recipient,
|
|
45
93
|
network,
|
|
94
|
+
token,
|
|
95
|
+
idempotencyKey,
|
|
46
96
|
});
|
|
47
97
|
if (!result.success) {
|
|
48
98
|
return {
|
|
@@ -56,11 +106,11 @@ export function createMcpServer() {
|
|
|
56
106
|
text: [
|
|
57
107
|
`Payment successful!`,
|
|
58
108
|
`Transaction: ${result.txHash}`,
|
|
59
|
-
`Amount: $${amount} USDC`,
|
|
109
|
+
`Amount: $${amount} ${token ?? 'USDC'}`,
|
|
60
110
|
`Recipient: ${recipient}`,
|
|
61
111
|
`Commission: ${result.commissionRate * 100}% ($${(Number(result.commissionAmount) / 1e6).toFixed(6)})`,
|
|
62
112
|
result.network ? `Network: ${result.network}` : '',
|
|
63
|
-
result.txHash ? `Explorer:
|
|
113
|
+
result.txHash ? `Explorer: ${explorerTxUrl(result.network, result.txHash)}` : '',
|
|
64
114
|
].filter(Boolean).join('\n'),
|
|
65
115
|
}],
|
|
66
116
|
};
|
|
@@ -103,13 +153,14 @@ export function createMcpServer() {
|
|
|
103
153
|
};
|
|
104
154
|
});
|
|
105
155
|
// --- paybot_register ---
|
|
106
|
-
server.tool('paybot_register', 'Register a new bot with the PayBot facilitator. Returns the assigned trust level.', {
|
|
156
|
+
server.tool('paybot_register', 'Register a new bot with the PayBot facilitator. Returns the assigned trust level. Supports an optional idempotency key for safe re-issue.', {
|
|
107
157
|
botId: z.string().describe('Unique bot identifier'),
|
|
108
158
|
trustLevel: z.number().min(0).max(5).optional().describe('Initial trust level 0-5 (default: 1)'),
|
|
109
|
-
|
|
159
|
+
idempotencyKey: z.string().optional().describe('Optional idempotency key; a repeat register with the same key returns the cached result'),
|
|
160
|
+
}, async ({ botId, trustLevel, idempotencyKey }) => {
|
|
110
161
|
try {
|
|
111
162
|
const client = getClient(botId);
|
|
112
|
-
const result = await client.register((trustLevel ?? 1));
|
|
163
|
+
const result = await client.register((trustLevel ?? 1), idempotencyKey);
|
|
113
164
|
return {
|
|
114
165
|
content: [{
|
|
115
166
|
type: 'text',
|
|
@@ -125,6 +176,334 @@ export function createMcpServer() {
|
|
|
125
176
|
};
|
|
126
177
|
}
|
|
127
178
|
});
|
|
179
|
+
// --- paybot_list_networks_and_tokens ---
|
|
180
|
+
server.tool('paybot_list_networks_and_tokens', 'List the networks and tokens PayBot supports. Read-only, offline, requires no API key. Surfaces only the PUBLIC open-core registry — operator-private mainnet addresses are never shown.', {}, async () => {
|
|
181
|
+
// Public registry only. We deliberately do NOT touch any operator
|
|
182
|
+
// tokenAddressOverrides — this discovery surface must never leak a
|
|
183
|
+
// private mainnet address (e.g. EURC mainnet). EURC therefore advertises
|
|
184
|
+
// only its public (Base Sepolia) deployment.
|
|
185
|
+
const networks = getSupportedNetworks().map((caip2) => {
|
|
186
|
+
const n = getNetwork(caip2);
|
|
187
|
+
return {
|
|
188
|
+
caip2,
|
|
189
|
+
name: n?.name ?? caip2,
|
|
190
|
+
isTestnet: n?.isTestnet ?? false,
|
|
191
|
+
explorerUrl: n?.explorerUrl ?? '',
|
|
192
|
+
};
|
|
193
|
+
});
|
|
194
|
+
const tokens = getSupportedTokens().map((symbol) => {
|
|
195
|
+
const t = getToken(symbol);
|
|
196
|
+
// Per-network deployment from the PUBLIC registry only.
|
|
197
|
+
const deployedOn = getSupportedNetworks().filter((caip2) => getTokenAddress(symbol, caip2) !== undefined);
|
|
198
|
+
return {
|
|
199
|
+
symbol,
|
|
200
|
+
decimals: t?.decimals ?? 0,
|
|
201
|
+
name: t?.name ?? symbol,
|
|
202
|
+
networks: deployedOn,
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
const networkLines = networks.map((n) => `- ${n.name} (${n.caip2})${n.isTestnet ? ' [testnet]' : ''} — ${n.explorerUrl}`);
|
|
206
|
+
const tokenLines = tokens.map((t) => `- ${t.symbol} (${t.name}, ${t.decimals} decimals) — on: ${t.networks.length ? t.networks.join(', ') : '(no public deployment)'}`);
|
|
207
|
+
return {
|
|
208
|
+
content: [{
|
|
209
|
+
type: 'text',
|
|
210
|
+
text: [
|
|
211
|
+
`Supported networks (${networks.length}):`,
|
|
212
|
+
...networkLines,
|
|
213
|
+
'',
|
|
214
|
+
`Supported tokens (${tokens.length}):`,
|
|
215
|
+
...tokenLines,
|
|
216
|
+
].join('\n'),
|
|
217
|
+
}],
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
// --- paybot_health_extended ---
|
|
221
|
+
server.tool('paybot_health_extended', 'Check extended facilitator health: status, version, uptime, timestamp, plus any extra fields the facilitator reports (e.g. relayer/gas/AML status).', {
|
|
222
|
+
botId: z.string().optional().describe('Bot identifier (defaults to env PAYBOT_BOT_ID)'),
|
|
223
|
+
}, async ({ botId }) => {
|
|
224
|
+
try {
|
|
225
|
+
const client = getClient(botId);
|
|
226
|
+
const health = await client.health();
|
|
227
|
+
const known = new Set(['status', 'version', 'uptime', 'timestamp']);
|
|
228
|
+
const extras = Object.entries(health)
|
|
229
|
+
.filter(([k]) => !known.has(k))
|
|
230
|
+
.map(([k, v]) => `${k}: ${typeof v === 'object' ? JSON.stringify(v) : String(v)}`);
|
|
231
|
+
return {
|
|
232
|
+
content: [{
|
|
233
|
+
type: 'text',
|
|
234
|
+
text: [
|
|
235
|
+
`Status: ${health.status}`,
|
|
236
|
+
`Version: ${health.version}`,
|
|
237
|
+
`Uptime: ${health.uptime}s`,
|
|
238
|
+
`Timestamp: ${health.timestamp}`,
|
|
239
|
+
...extras,
|
|
240
|
+
].join('\n'),
|
|
241
|
+
}],
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
const message = error instanceof PayBotApiError ? error.message : String(error);
|
|
246
|
+
return {
|
|
247
|
+
content: [{ type: 'text', text: `Health check failed: ${message}` }],
|
|
248
|
+
isError: true,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
// --- paybot_set_spending_limit ---
|
|
253
|
+
server.tool('paybot_set_spending_limit', 'Set spending limits for a bot. Tightens the agent\'s own limits; the facilitator enforces the operator ceiling and may reject attempts to loosen beyond policy.', {
|
|
254
|
+
botId: z.string().optional().describe('Bot identifier (defaults to env PAYBOT_BOT_ID)'),
|
|
255
|
+
maxTransactionUsd: z.number().nonnegative().optional().describe('Max USD per transaction'),
|
|
256
|
+
maxDailySpendUsd: z.number().nonnegative().optional().describe('Max USD spend per day'),
|
|
257
|
+
maxTransactionsPerHour: z.number().int().nonnegative().optional().describe('Max transactions per hour'),
|
|
258
|
+
allowedRecipients: z.array(z.string()).optional().describe('Allowlist of recipient addresses'),
|
|
259
|
+
}, async ({ botId, maxTransactionUsd, maxDailySpendUsd, maxTransactionsPerHour, allowedRecipients }) => {
|
|
260
|
+
try {
|
|
261
|
+
const client = getClient(botId);
|
|
262
|
+
const limits = {};
|
|
263
|
+
if (maxTransactionUsd !== undefined)
|
|
264
|
+
limits.maxTransactionUsd = maxTransactionUsd;
|
|
265
|
+
if (maxDailySpendUsd !== undefined)
|
|
266
|
+
limits.maxDailySpendUsd = maxDailySpendUsd;
|
|
267
|
+
if (maxTransactionsPerHour !== undefined)
|
|
268
|
+
limits.maxTransactionsPerHour = maxTransactionsPerHour;
|
|
269
|
+
if (allowedRecipients !== undefined)
|
|
270
|
+
limits.allowedRecipients = allowedRecipients;
|
|
271
|
+
if (Object.keys(limits).length === 0) {
|
|
272
|
+
return {
|
|
273
|
+
content: [{ type: 'text', text: 'No limits provided. Specify at least one limit field.' }],
|
|
274
|
+
isError: true,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
await client.setLimits(limits);
|
|
278
|
+
const applied = Object.entries(limits).map(([k, v]) => `${k}: ${Array.isArray(v) ? v.join(', ') : v}`);
|
|
279
|
+
return {
|
|
280
|
+
content: [{
|
|
281
|
+
type: 'text',
|
|
282
|
+
text: ['Spending limits updated:', ...applied].join('\n'),
|
|
283
|
+
}],
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
const message = error instanceof PayBotApiError ? error.message : String(error);
|
|
288
|
+
return {
|
|
289
|
+
content: [{ type: 'text', text: `Failed to set limits: ${message}` }],
|
|
290
|
+
isError: true,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
// --- paybot_commission_inspect ---
|
|
295
|
+
server.tool('paybot_commission_inspect', 'Inspect commission for transparency: aggregate summary (totals + rate) and a filterable, paginated ledger.', {
|
|
296
|
+
botId: z.string().optional().describe('Bot identifier (defaults to env PAYBOT_BOT_ID)'),
|
|
297
|
+
status: z.enum(['pending', 'forwarded', 'deferred']).optional().describe('Filter ledger entries by status'),
|
|
298
|
+
startDate: z.string().optional().describe('Ledger start date (ISO 8601)'),
|
|
299
|
+
endDate: z.string().optional().describe('Ledger end date (ISO 8601)'),
|
|
300
|
+
limit: z.number().int().positive().optional().describe('Max ledger entries (default: 50)'),
|
|
301
|
+
offset: z.number().int().nonnegative().optional().describe('Ledger pagination offset'),
|
|
302
|
+
}, async ({ botId, status, startDate, endDate, limit, offset }) => {
|
|
303
|
+
try {
|
|
304
|
+
const client = getClient(botId);
|
|
305
|
+
const summary = await client.commissionSummary();
|
|
306
|
+
const filter = {};
|
|
307
|
+
if (status !== undefined)
|
|
308
|
+
filter.status = status;
|
|
309
|
+
if (startDate !== undefined)
|
|
310
|
+
filter.startDate = startDate;
|
|
311
|
+
if (endDate !== undefined)
|
|
312
|
+
filter.endDate = endDate;
|
|
313
|
+
if (limit !== undefined)
|
|
314
|
+
filter.limit = limit;
|
|
315
|
+
if (offset !== undefined)
|
|
316
|
+
filter.offset = offset;
|
|
317
|
+
const ledger = await client.commissionLedger(Object.keys(filter).length ? filter : undefined);
|
|
318
|
+
const summaryLines = [
|
|
319
|
+
'Commission summary:',
|
|
320
|
+
`- Rate: ${(summary.commissionRate * 100).toFixed(2)}%`,
|
|
321
|
+
`- Total earned: ${summary.totalEarned}`,
|
|
322
|
+
`- Pending: ${summary.pending}`,
|
|
323
|
+
`- Forwarded: ${summary.forwarded}`,
|
|
324
|
+
`- Deferred: ${summary.deferred}`,
|
|
325
|
+
`- Entries: ${summary.entryCount}`,
|
|
326
|
+
];
|
|
327
|
+
const ledgerLines = ledger.length === 0
|
|
328
|
+
? ['Ledger: no entries.']
|
|
329
|
+
: [
|
|
330
|
+
`Ledger (${ledger.length} entries):`,
|
|
331
|
+
...ledger.map((e, i) => `${i + 1}. [${e.status}] ${e.commissionAmount} from tx ${e.txHash} (${e.createdAt})`),
|
|
332
|
+
];
|
|
333
|
+
return {
|
|
334
|
+
content: [{
|
|
335
|
+
type: 'text',
|
|
336
|
+
text: [...summaryLines, '', ...ledgerLines].join('\n'),
|
|
337
|
+
}],
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
const message = error instanceof PayBotApiError ? error.message : String(error);
|
|
342
|
+
return {
|
|
343
|
+
content: [{ type: 'text', text: `Failed to inspect commission: ${message}` }],
|
|
344
|
+
isError: true,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
// --- paybot_pool_create ---
|
|
349
|
+
server.tool('paybot_pool_create', 'Create an in-process bot pool with an optional shared daily treasury. The pool lives for this MCP session; treasury accounting is in-memory and the facilitator remains authoritative.', {
|
|
350
|
+
poolId: z.string().describe('Identifier for this pool (used by allocate/revoke/status)'),
|
|
351
|
+
sharedDailyLimitUsd: z.number().nonnegative().optional().describe('Optional shared daily spend cap across all bots'),
|
|
352
|
+
}, async ({ poolId, sharedDailyLimitUsd }) => {
|
|
353
|
+
const apiKey = process.env.PAYBOT_API_KEY ?? process.env.API_KEY;
|
|
354
|
+
if (!apiKey) {
|
|
355
|
+
return {
|
|
356
|
+
content: [{ type: 'text', text: 'PayBot MCP server requires an API key (PAYBOT_API_KEY or API_KEY) to create a pool.' }],
|
|
357
|
+
isError: true,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
if (pools.has(poolId)) {
|
|
361
|
+
return {
|
|
362
|
+
content: [{ type: 'text', text: `Pool "${poolId}" already exists.` }],
|
|
363
|
+
isError: true,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
try {
|
|
367
|
+
const pool = new PayBotClientPool({
|
|
368
|
+
apiKey,
|
|
369
|
+
facilitatorUrl: process.env.PAYBOT_FACILITATOR_URL ?? process.env.X402_FACILITATOR_URL ?? 'https://api.paybotcore.com',
|
|
370
|
+
sharedDailyLimitUsd,
|
|
371
|
+
});
|
|
372
|
+
pools.set(poolId, pool);
|
|
373
|
+
return {
|
|
374
|
+
content: [{
|
|
375
|
+
type: 'text',
|
|
376
|
+
text: [
|
|
377
|
+
`Pool "${poolId}" created.`,
|
|
378
|
+
sharedDailyLimitUsd !== undefined
|
|
379
|
+
? `Shared daily treasury: $${sharedDailyLimitUsd.toFixed(2)}`
|
|
380
|
+
: 'Shared daily treasury: unbounded',
|
|
381
|
+
].join('\n'),
|
|
382
|
+
}],
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
return {
|
|
387
|
+
content: [{ type: 'text', text: `Failed to create pool: ${String(error instanceof Error ? error.message : error)}` }],
|
|
388
|
+
isError: true,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
// --- paybot_pool_allocate ---
|
|
393
|
+
server.tool('paybot_pool_allocate', 'Add a bot to a pool, and optionally make a payment as that bot through the shared treasury.', {
|
|
394
|
+
poolId: z.string().describe('Pool identifier'),
|
|
395
|
+
botId: z.string().describe('Bot identifier to add to the pool'),
|
|
396
|
+
trustLevel: z.number().min(0).max(5).optional().describe('Initial trust level 0-5'),
|
|
397
|
+
pay: z.object({
|
|
398
|
+
amount: z.string().describe('Amount in USD'),
|
|
399
|
+
recipient: z.string().describe('Recipient wallet address (0x...)'),
|
|
400
|
+
resource: z.string().describe('URL or description of what is being paid for'),
|
|
401
|
+
network: z.string().optional().describe('Network CAIP-2 ID'),
|
|
402
|
+
token: z.string().optional().describe('Token ticker (default USDC)'),
|
|
403
|
+
}).optional().describe('Optional payment to execute as this bot after allocation'),
|
|
404
|
+
}, async ({ poolId, botId, trustLevel, pay }) => {
|
|
405
|
+
const pool = pools.get(poolId);
|
|
406
|
+
if (!pool) {
|
|
407
|
+
return {
|
|
408
|
+
content: [{ type: 'text', text: `Pool "${poolId}" not found. Create it first with paybot_pool_create.` }],
|
|
409
|
+
isError: true,
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
try {
|
|
413
|
+
if (!pool.hasBot(botId)) {
|
|
414
|
+
pool.addBot({ botId, trustLevel: trustLevel });
|
|
415
|
+
}
|
|
416
|
+
if (!pay) {
|
|
417
|
+
return {
|
|
418
|
+
content: [{ type: 'text', text: `Bot "${botId}" allocated to pool "${poolId}".` }],
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
const result = await pool.payAs(botId, {
|
|
422
|
+
resource: pay.resource,
|
|
423
|
+
amount: pay.amount,
|
|
424
|
+
payTo: pay.recipient,
|
|
425
|
+
network: pay.network,
|
|
426
|
+
token: pay.token,
|
|
427
|
+
});
|
|
428
|
+
if (!result.success) {
|
|
429
|
+
return {
|
|
430
|
+
content: [{
|
|
431
|
+
type: 'text',
|
|
432
|
+
text: `Bot "${botId}" allocated. Payment failed: ${result.errorCode ?? ''} ${result.error ?? ''}`.trim(),
|
|
433
|
+
}],
|
|
434
|
+
isError: true,
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
return {
|
|
438
|
+
content: [{
|
|
439
|
+
type: 'text',
|
|
440
|
+
text: [
|
|
441
|
+
`Bot "${botId}" allocated and paid.`,
|
|
442
|
+
`Transaction: ${result.txHash}`,
|
|
443
|
+
`Amount: $${pay.amount} ${pay.token ?? 'USDC'}`,
|
|
444
|
+
result.txHash ? `Explorer: ${explorerTxUrl(result.network, result.txHash)}` : '',
|
|
445
|
+
].filter(Boolean).join('\n'),
|
|
446
|
+
}],
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
catch (error) {
|
|
450
|
+
return {
|
|
451
|
+
content: [{ type: 'text', text: `Allocation failed: ${String(error instanceof Error ? error.message : error)}` }],
|
|
452
|
+
isError: true,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
// --- paybot_pool_revoke ---
|
|
457
|
+
server.tool('paybot_pool_revoke', 'Remove a bot from a pool.', {
|
|
458
|
+
poolId: z.string().describe('Pool identifier'),
|
|
459
|
+
botId: z.string().describe('Bot identifier to remove'),
|
|
460
|
+
}, async ({ poolId, botId }) => {
|
|
461
|
+
const pool = pools.get(poolId);
|
|
462
|
+
if (!pool) {
|
|
463
|
+
return {
|
|
464
|
+
content: [{ type: 'text', text: `Pool "${poolId}" not found.` }],
|
|
465
|
+
isError: true,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
const removed = pool.removeBot(botId);
|
|
469
|
+
return {
|
|
470
|
+
content: [{
|
|
471
|
+
type: 'text',
|
|
472
|
+
text: removed
|
|
473
|
+
? `Bot "${botId}" revoked from pool "${poolId}".`
|
|
474
|
+
: `Bot "${botId}" was not in pool "${poolId}".`,
|
|
475
|
+
}],
|
|
476
|
+
...(removed ? {} : { isError: true }),
|
|
477
|
+
};
|
|
478
|
+
});
|
|
479
|
+
// --- paybot_pool_status ---
|
|
480
|
+
server.tool('paybot_pool_status', 'Report a pool\'s remaining shared treasury and per-bot local spend/transaction counters (in-process projection; facilitator is authoritative).', {
|
|
481
|
+
poolId: z.string().describe('Pool identifier'),
|
|
482
|
+
}, async ({ poolId }) => {
|
|
483
|
+
const pool = pools.get(poolId);
|
|
484
|
+
if (!pool) {
|
|
485
|
+
return {
|
|
486
|
+
content: [{ type: 'text', text: `Pool "${poolId}" not found.` }],
|
|
487
|
+
isError: true,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
const remaining = pool.remainingTreasuryUsd();
|
|
491
|
+
const botLines = pool.botIds().map((id) => {
|
|
492
|
+
const s = pool.botStats(id);
|
|
493
|
+
return `- ${id}: spent $${s.dailySpentUsd.toFixed(2)} today, ${s.dailyTxCount} tx`;
|
|
494
|
+
});
|
|
495
|
+
return {
|
|
496
|
+
content: [{
|
|
497
|
+
type: 'text',
|
|
498
|
+
text: [
|
|
499
|
+
`Pool "${poolId}" status:`,
|
|
500
|
+
`Bots: ${pool.size}`,
|
|
501
|
+
`Remaining treasury: ${remaining === null ? 'unbounded' : `$${remaining.toFixed(2)}`}`,
|
|
502
|
+
...(botLines.length ? ['Per-bot:', ...botLines] : ['No bots allocated.']),
|
|
503
|
+
].join('\n'),
|
|
504
|
+
}],
|
|
505
|
+
};
|
|
506
|
+
});
|
|
128
507
|
return server;
|
|
129
508
|
}
|
|
130
509
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG1D;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,sDAAsD;IACtD,SAAS,SAAS,CAAC,KAAc;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACjE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,yCAAyC;gBACzC,qFAAqF,CACtF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,YAAY,CAAC;YACtB,MAAM;YACN,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,4BAA4B;YACtH,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,WAAW;YACxD,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;SAChD,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,0GAA0G,EAC1G;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACvE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;KAClG,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;YAC9B,QAAQ;YACR,MAAM;YACN,KAAK,EAAE,SAAS;YAChB,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC7E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,qBAAqB;wBACrB,gBAAgB,MAAM,CAAC,MAAM,EAAE;wBAC/B,YAAY,MAAM,OAAO;wBACzB,cAAc,SAAS,EAAE;wBACzB,eAAe,MAAM,CAAC,cAAc,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;wBACtG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;wBAClD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,6CAA6C,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;qBAClF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;iBAC7B,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,2EAA2E,EAC3E;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KACxF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,QAAQ,OAAO,CAAC,KAAK,EAAE;wBACvB,gBAAgB,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,cAAc,GAAG;wBAChE,iBAAiB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACnD,iBAAiB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACnD,eAAe,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACrD,wBAAwB,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE;qBAC5E,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,yDAAyD,EACzD;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAC5E,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;aACxE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACpC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,CAClF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,SAAS,EAAE,EAAE,CAAC;SAC3E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,mFAAmF,EACnF;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACjG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,IAAI,CAAC,CAAe,CAAC,CAAC;YAEtE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,QAAQ,KAAK,+BAA+B,MAAM,CAAC,UAAU,2BAA2B;qBAC/F,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;gBAC7E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;GASG;AACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEvF;;;;;;;;;;;;;GAaG;AACH,SAAS,aAAa,CAAC,OAA2B,EAAE,MAAc;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,MAAM,IAAI,GAAG,GAAG,EAAE,WAAW,IAAI,8BAA8B,CAAC;IAChE,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;IAEH,sDAAsD;IACtD,SAAS,SAAS,CAAC,KAAc;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACjE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,yCAAyC;gBACzC,qFAAqF,CACtF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,YAAY,CAAC;YACtB,MAAM;YACN,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,4BAA4B;YACtH,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,WAAW;YACxD,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;SAChD,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAElD,qBAAqB;IACrB,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,kKAAkK,EAClK;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACvE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;QACjG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;QACvG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qFAAqF,CAAC;KACtI,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE;QAC/E,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;YAC9B,QAAQ;YACR,MAAM;YACN,KAAK,EAAE,SAAS;YAChB,OAAO;YACP,KAAK;YACL,cAAc;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC7E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,qBAAqB;wBACrB,gBAAgB,MAAM,CAAC,MAAM,EAAE;wBAC/B,YAAY,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE;wBACvC,cAAc,SAAS,EAAE;wBACzB,eAAe,MAAM,CAAC,cAAc,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;wBACtG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;wBAClD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;qBACjF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;iBAC7B,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,2EAA2E,EAC3E;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KACxF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,QAAQ,OAAO,CAAC,KAAK,EAAE;wBACvB,gBAAgB,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,cAAc,GAAG;wBAChE,iBAAiB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACnD,iBAAiB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACnD,eAAe,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACrD,wBAAwB,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE;qBAC5E,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,yDAAyD,EACzD;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAC5E,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;aACxE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACpC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,CAClF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,SAAS,EAAE,EAAE,CAAC;SAC3E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2IAA2I,EAC3I;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAChG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yFAAyF,CAAC;KAC1I,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,IAAI,CAAC,CAAe,EAAE,cAAc,CAAC,CAAC;YAEtF,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,QAAQ,KAAK,+BAA+B,MAAM,CAAC,UAAU,2BAA2B;qBAC/F,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;gBAC7E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,0CAA0C;IAC1C,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC,0LAA0L,EAC1L,EAAE,EACF,KAAK,IAAI,EAAE;QACT,kEAAkE;QAClE,mEAAmE;QACnE,yEAAyE;QACzE,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACpD,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO;gBACL,KAAK;gBACL,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,KAAK;gBACtB,SAAS,EAAE,CAAC,EAAE,SAAS,IAAI,KAAK;gBAChC,WAAW,EAAE,CAAC,EAAE,WAAW,IAAI,EAAE;aAClC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3B,wDAAwD;YACxD,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC,MAAM,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,SAAS,CACxD,CAAC;YACF,OAAO;gBACL,MAAM;gBACN,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC;gBAC1B,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,MAAM;gBACvB,QAAQ,EAAE,UAAU;aACrB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAChF,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,oBAAoB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAClI,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,uBAAuB,QAAQ,CAAC,MAAM,IAAI;wBAC1C,GAAG,YAAY;wBACf,EAAE;wBACF,qBAAqB,MAAM,CAAC,MAAM,IAAI;wBACtC,GAAG,UAAU;qBACd,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,iCAAiC;IACjC,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,qJAAqJ,EACrJ;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KACxF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YAErC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;iBAClC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC9B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAErF,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,WAAW,MAAM,CAAC,MAAM,EAAE;4BAC1B,YAAY,MAAM,CAAC,OAAO,EAAE;4BAC5B,WAAW,MAAM,CAAC,MAAM,GAAG;4BAC3B,cAAc,MAAM,CAAC,SAAS,EAAE;4BAChC,GAAG,MAAM;yBACV,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;gBAC7E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,oCAAoC;IACpC,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,iKAAiK,EACjK;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC1F,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACvF,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACvG,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAC/F,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,EAAE,EAAE;QAClG,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,IAAI,iBAAiB,KAAK,SAAS;gBAAE,MAAM,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;YAClF,IAAI,gBAAgB,KAAK,SAAS;gBAAE,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YAC/E,IAAI,sBAAsB,KAAK,SAAS;gBAAE,MAAM,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;YACjG,IAAI,iBAAiB,KAAK,SAAS;gBAAE,MAAM,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;YAElF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uDAAuD,EAAE,CAAC;oBACnG,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CACpD,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAC/C,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,CAAC,0BAA0B,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;qBAC1D,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yBAAyB,OAAO,EAAE,EAAE,CAAC;gBAC9E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,oCAAoC;IACpC,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,4GAA4G,EAC5G;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC3G,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACzE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC1F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACvF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAEjD,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACjD,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;YAC1D,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YACpD,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9C,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;YAEF,MAAM,YAAY,GAAG;gBACnB,qBAAqB;gBACrB,WAAW,CAAC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBACvD,mBAAmB,OAAO,CAAC,WAAW,EAAE;gBACxC,cAAc,OAAO,CAAC,OAAO,EAAE;gBAC/B,gBAAgB,OAAO,CAAC,SAAS,EAAE;gBACnC,eAAe,OAAO,CAAC,QAAQ,EAAE;gBACjC,cAAc,OAAO,CAAC,UAAU,EAAE;aACnC,CAAC;YAEF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC;gBACrC,CAAC,CAAC,CAAC,qBAAqB,CAAC;gBACzB,CAAC,CAAC;oBACE,WAAW,MAAM,CAAC,MAAM,YAAY;oBACpC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACrB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,gBAAgB,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,GAAG,CACrF;iBACF,CAAC;YAEN,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,CAAC,GAAG,YAAY,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;qBACvD,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iCAAiC,OAAO,EAAE,EAAE,CAAC;gBACtF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,wLAAwL,EACxL;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QACxF,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;KACrH,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACjE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qFAAqF,EAAE,CAAC;gBACjI,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,MAAM,mBAAmB,EAAE,CAAC;gBAC9E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC;gBAChC,MAAM;gBACN,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,4BAA4B;gBACtH,mBAAmB;aACpB,CAAC,CAAC;YACH,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,SAAS,MAAM,YAAY;4BAC3B,mBAAmB,KAAK,SAAS;gCAC/B,CAAC,CAAC,2BAA2B,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gCAC7D,CAAC,CAAC,kCAAkC;yBACvC,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC9H,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,+BAA+B;IAC/B,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,6FAA6F,EAC7F;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACnF,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YAC7E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;SACrE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;KACnF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,MAAM,uDAAuD,EAAE,CAAC;gBAClH,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAoC,EAAE,CAAC,CAAC;YAC3E,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,KAAK,wBAAwB,MAAM,IAAI,EAAE,CAAC;iBAC5F,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,SAAS;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,QAAQ,KAAK,gCAAgC,MAAM,CAAC,SAAS,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;yBACzG,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,QAAQ,KAAK,uBAAuB;4BACpC,gBAAgB,MAAM,CAAC,MAAM,EAAE;4BAC/B,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,MAAM,EAAE;4BAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;yBACjF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;qBAC7B,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sBAAsB,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC1H,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,2BAA2B,EAC3B;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACvD,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,MAAM,cAAc,EAAE,CAAC;gBACzE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO;wBACX,CAAC,CAAC,QAAQ,KAAK,wBAAwB,MAAM,IAAI;wBACjD,CAAC,CAAC,QAAQ,KAAK,sBAAsB,MAAM,IAAI;iBAClD,CAAC;YACF,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SACtC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gJAAgJ,EAChJ;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC/C,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,MAAM,cAAc,EAAE,CAAC;gBACzE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,KAAK,EAAE,YAAY,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,YAAY,KAAK,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,SAAS,MAAM,WAAW;wBAC1B,SAAS,IAAI,CAAC,IAAI,EAAE;wBACpB,uBAAuB,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBACtF,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;qBAC1E,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|