@shawnowen/comet-mcp 2.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.
@@ -0,0 +1,463 @@
1
+ #!/usr/bin/env node
2
+ // Comet Bridge HTTP API Server
3
+ // Exposes Comet-Bridge functionality as REST endpoints
4
+ // Designed for Claude Cowork to call via Chrome's fetch() (localhost bypass)
5
+ //
6
+ // Architecture:
7
+ // Cowork VM -> Claude-in-Chrome MCP -> Chrome fetch('localhost:3456') -> this server -> CDP -> Comet
8
+ import { createServer } from "node:http";
9
+ import { cometClient } from "./cdp-client.js";
10
+ import { cometAI } from "./comet-ai.js";
11
+ import { tabGroupsClient } from "./tab-groups.js";
12
+ const PORT = parseInt(process.env.COMET_HTTP_PORT || "3456", 10);
13
+ // Simple mutex to prevent concurrent CDP operations
14
+ let busy = false;
15
+ function json(res, data, status = 200) {
16
+ res.writeHead(status, {
17
+ "Content-Type": "application/json",
18
+ "Access-Control-Allow-Origin": "*",
19
+ "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
20
+ "Access-Control-Allow-Headers": "Content-Type",
21
+ });
22
+ res.end(JSON.stringify(data));
23
+ }
24
+ function errorJson(res, message, status = 500) {
25
+ json(res, { error: message }, status);
26
+ }
27
+ async function readBody(req) {
28
+ return new Promise((resolve) => {
29
+ const chunks = [];
30
+ req.on("data", (chunk) => chunks.push(chunk));
31
+ req.on("end", () => {
32
+ if (chunks.length === 0)
33
+ return resolve({});
34
+ try {
35
+ resolve(JSON.parse(Buffer.concat(chunks).toString()));
36
+ }
37
+ catch {
38
+ resolve({});
39
+ }
40
+ });
41
+ });
42
+ }
43
+ async function withMutex(res, fn) {
44
+ if (busy) {
45
+ errorJson(res, "Server busy — another operation is in progress. Try again shortly.", 429);
46
+ return null;
47
+ }
48
+ busy = true;
49
+ try {
50
+ return await fn();
51
+ }
52
+ finally {
53
+ busy = false;
54
+ }
55
+ }
56
+ // ---- Route handlers (mirrored from index.ts MCP tool handlers) ----
57
+ async function handleConnect(res) {
58
+ const result = await withMutex(res, async () => {
59
+ const startResult = await cometClient.startComet(9222);
60
+ const targets = await cometClient.listTargets();
61
+ const pageTabs = targets.filter((t) => t.type === "page");
62
+ if (pageTabs.length > 1) {
63
+ for (let i = 1; i < pageTabs.length; i++) {
64
+ try {
65
+ await cometClient.closeTab(pageTabs[i].id);
66
+ }
67
+ catch { /* ignore */ }
68
+ }
69
+ }
70
+ const freshTargets = await cometClient.listTargets();
71
+ const anyPage = freshTargets.find((t) => t.type === "page");
72
+ if (anyPage) {
73
+ await cometClient.connect(anyPage.id);
74
+ await cometClient.navigate("https://www.perplexity.ai/", true);
75
+ await new Promise((r) => setTimeout(r, 1500));
76
+ return { message: `${startResult}\nConnected to Perplexity (cleaned ${pageTabs.length - 1} old tabs)` };
77
+ }
78
+ const newTab = await cometClient.newTab("https://www.perplexity.ai/");
79
+ await new Promise((r) => setTimeout(r, 2000));
80
+ await cometClient.connect(newTab.id);
81
+ return { message: `${startResult}\nCreated new tab and navigated to Perplexity` };
82
+ });
83
+ if (result)
84
+ json(res, result);
85
+ }
86
+ async function handleAsk(res, body) {
87
+ const result = await withMutex(res, async () => {
88
+ let prompt = body.prompt;
89
+ const timeout = body.timeout || 15000;
90
+ const newChat = body.newChat || false;
91
+ if (!prompt || prompt.trim().length === 0) {
92
+ return { error: "prompt cannot be empty" };
93
+ }
94
+ // Normalize prompt
95
+ prompt = prompt
96
+ .replace(/^[-*\u2022]\s*/gm, "")
97
+ .replace(/\n+/g, " ")
98
+ .replace(/\s+/g, " ")
99
+ .trim();
100
+ // newChat: full reset
101
+ if (newChat) {
102
+ const targets = await cometClient.listTargets();
103
+ const pageTabs = targets.filter((t) => t.type === "page");
104
+ if (pageTabs.length > 1) {
105
+ for (let i = 1; i < pageTabs.length; i++) {
106
+ try {
107
+ await cometClient.closeTab(pageTabs[i].id);
108
+ }
109
+ catch { /* ignore */ }
110
+ }
111
+ }
112
+ const freshTargets = await cometClient.listTargets();
113
+ const mainTab = freshTargets.find((t) => t.type === "page");
114
+ if (mainTab)
115
+ await cometClient.connect(mainTab.id);
116
+ await cometClient.navigate("https://www.perplexity.ai/", true);
117
+ await new Promise((r) => setTimeout(r, 1500));
118
+ }
119
+ else {
120
+ const tabs = await cometClient.listTabsCategorized();
121
+ if (tabs.main)
122
+ await cometClient.connect(tabs.main.id);
123
+ const urlResult = await cometClient.evaluate("window.location.href");
124
+ const currentUrl = urlResult.result.value;
125
+ if (!currentUrl?.includes("perplexity.ai")) {
126
+ await cometClient.navigate("https://www.perplexity.ai/", true);
127
+ await new Promise((r) => setTimeout(r, 2000));
128
+ }
129
+ }
130
+ // Capture old response state
131
+ const oldStateResult = await cometClient.evaluate(`
132
+ (() => {
133
+ const proseEls = document.querySelectorAll('[class*="prose"]');
134
+ const lastProse = proseEls[proseEls.length - 1];
135
+ return {
136
+ count: proseEls.length,
137
+ lastText: lastProse ? lastProse.innerText.substring(0, 100) : ''
138
+ };
139
+ })()
140
+ `);
141
+ const oldState = oldStateResult.result.value;
142
+ // Send the prompt
143
+ await cometAI.sendPrompt(prompt);
144
+ // Wait for completion
145
+ const startTime = Date.now();
146
+ const stepsCollected = [];
147
+ let sawNewResponse = false;
148
+ while (Date.now() - startTime < timeout) {
149
+ await new Promise((r) => setTimeout(r, 2000));
150
+ const currentStateResult = await cometClient.evaluate(`
151
+ (() => {
152
+ const proseEls = document.querySelectorAll('[class*="prose"]');
153
+ const lastProse = proseEls[proseEls.length - 1];
154
+ return {
155
+ count: proseEls.length,
156
+ lastText: lastProse ? lastProse.innerText.substring(0, 100) : ''
157
+ };
158
+ })()
159
+ `);
160
+ const currentState = currentStateResult.result.value;
161
+ if (!sawNewResponse) {
162
+ if (currentState.count > oldState.count ||
163
+ (currentState.lastText && currentState.lastText !== oldState.lastText)) {
164
+ sawNewResponse = true;
165
+ }
166
+ }
167
+ const status = await cometAI.getAgentStatus();
168
+ for (const step of status.steps) {
169
+ if (!stepsCollected.includes(step))
170
+ stepsCollected.push(step);
171
+ }
172
+ if (status.status === "completed" && sawNewResponse) {
173
+ return { status: "completed", response: status.response || "Task completed (no response text extracted)" };
174
+ }
175
+ }
176
+ // Timeout — return in-progress status
177
+ const finalStatus = await cometAI.getAgentStatus();
178
+ return {
179
+ status: "in_progress",
180
+ steps: stepsCollected,
181
+ currentStep: finalStatus.currentStep || null,
182
+ agentBrowsingUrl: finalStatus.agentBrowsingUrl || null,
183
+ message: `Task in progress (${stepsCollected.length} steps so far). Use /api/poll to check progress.`,
184
+ };
185
+ });
186
+ if (result) {
187
+ if ("error" in result) {
188
+ errorJson(res, result.error, 400);
189
+ }
190
+ else {
191
+ json(res, result);
192
+ }
193
+ }
194
+ }
195
+ async function handlePoll(res) {
196
+ const result = await withMutex(res, async () => {
197
+ const status = await cometAI.getAgentStatus();
198
+ if (status.status === "completed" && status.response) {
199
+ return { status: "completed", response: status.response };
200
+ }
201
+ return {
202
+ status: status.status,
203
+ steps: status.steps,
204
+ currentStep: status.currentStep || null,
205
+ agentBrowsingUrl: status.agentBrowsingUrl || null,
206
+ };
207
+ });
208
+ if (result)
209
+ json(res, result);
210
+ }
211
+ async function handleStop(res) {
212
+ const result = await withMutex(res, async () => {
213
+ const stopped = await cometAI.stopAgent();
214
+ return { stopped, message: stopped ? "Agent stopped" : "No active agent to stop" };
215
+ });
216
+ if (result)
217
+ json(res, result);
218
+ }
219
+ async function handleScreenshot(res) {
220
+ const result = await withMutex(res, async () => {
221
+ const screenshot = await cometClient.screenshot("png");
222
+ return { data: screenshot.data, mimeType: "image/png" };
223
+ });
224
+ if (result)
225
+ json(res, result);
226
+ }
227
+ async function handleMode(res, body) {
228
+ const result = await withMutex(res, async () => {
229
+ const mode = body.mode;
230
+ if (!mode) {
231
+ // Return current mode
232
+ const modeResult = await cometClient.evaluate(`
233
+ (() => {
234
+ const modes = ['Search', 'Research', 'Labs', 'Learn'];
235
+ for (const mode of modes) {
236
+ const btn = document.querySelector('button[aria-label="' + mode + '"]');
237
+ if (btn && btn.getAttribute('data-state') === 'checked') return mode.toLowerCase();
238
+ }
239
+ const dropdownBtn = document.querySelector('button[class*="gap"]');
240
+ if (dropdownBtn) {
241
+ const text = dropdownBtn.innerText.toLowerCase();
242
+ if (text.includes('search')) return 'search';
243
+ if (text.includes('research')) return 'research';
244
+ if (text.includes('labs')) return 'labs';
245
+ if (text.includes('learn')) return 'learn';
246
+ }
247
+ return 'search';
248
+ })()
249
+ `);
250
+ return { currentMode: modeResult.result.value };
251
+ }
252
+ const modeMap = { search: "Search", research: "Research", labs: "Labs", learn: "Learn" };
253
+ const ariaLabel = modeMap[mode];
254
+ if (!ariaLabel) {
255
+ return { error: `Invalid mode: ${mode}. Use: search, research, labs, learn` };
256
+ }
257
+ const state = cometClient.currentState;
258
+ if (!state.currentUrl?.includes("perplexity.ai")) {
259
+ await cometClient.navigate("https://www.perplexity.ai/", true);
260
+ }
261
+ const clickResult = await cometClient.evaluate(`
262
+ (() => {
263
+ const btn = document.querySelector('button[aria-label="${ariaLabel}"]');
264
+ if (btn) { btn.click(); return { success: true, method: 'button' }; }
265
+ const allButtons = document.querySelectorAll('button');
266
+ for (const b of allButtons) {
267
+ const text = b.innerText.toLowerCase();
268
+ if ((text.includes('search') || text.includes('research') ||
269
+ text.includes('labs') || text.includes('learn')) && b.querySelector('svg')) {
270
+ b.click();
271
+ return { success: true, method: 'dropdown-open', needsSelect: true };
272
+ }
273
+ }
274
+ return { success: false, error: "Mode selector not found" };
275
+ })()
276
+ `);
277
+ const result = clickResult.result.value;
278
+ if (result.success && result.needsSelect) {
279
+ await new Promise((r) => setTimeout(r, 300));
280
+ const selectResult = await cometClient.evaluate(`
281
+ (() => {
282
+ const items = document.querySelectorAll('[role="menuitem"], [role="option"], button');
283
+ for (const item of items) {
284
+ if (item.innerText.toLowerCase().includes('${mode}')) {
285
+ item.click();
286
+ return { success: true };
287
+ }
288
+ }
289
+ return { success: false, error: "Mode option not found in dropdown" };
290
+ })()
291
+ `);
292
+ const selectRes = selectResult.result.value;
293
+ if (selectRes.success)
294
+ return { mode, message: `Switched to ${mode} mode` };
295
+ return { error: selectRes.error || "Failed to select mode from dropdown" };
296
+ }
297
+ if (result.success)
298
+ return { mode, message: `Switched to ${mode} mode` };
299
+ return { error: result.error || "Failed to switch mode" };
300
+ });
301
+ if (result) {
302
+ if ("error" in result) {
303
+ errorJson(res, result.error, 400);
304
+ }
305
+ else {
306
+ json(res, result);
307
+ }
308
+ }
309
+ }
310
+ // ---- Tab Group route handlers ----
311
+ async function handleTabGroupsList(res) {
312
+ const result = await withMutex(res, async () => {
313
+ return { groups: await tabGroupsClient.listGroups() };
314
+ });
315
+ if (result)
316
+ json(res, result);
317
+ }
318
+ async function handleTabGroupsListTabs(res) {
319
+ const result = await withMutex(res, async () => {
320
+ return { tabs: await tabGroupsClient.listTabs() };
321
+ });
322
+ if (result)
323
+ json(res, result);
324
+ }
325
+ async function handleTabGroupsCreate(res, body) {
326
+ const result = await withMutex(res, async () => {
327
+ const tabIds = body.tabIds;
328
+ if (!tabIds || tabIds.length === 0)
329
+ return { error: "tabIds is required" };
330
+ return await tabGroupsClient.createGroup({
331
+ tabIds,
332
+ title: body.title,
333
+ color: body.color,
334
+ });
335
+ });
336
+ if (result) {
337
+ if (result && "error" in result)
338
+ errorJson(res, result.error, 400);
339
+ else
340
+ json(res, result);
341
+ }
342
+ }
343
+ async function handleTabGroupsUpdate(res, body) {
344
+ const result = await withMutex(res, async () => {
345
+ const groupId = body.groupId;
346
+ if (groupId === undefined)
347
+ return { error: "groupId is required" };
348
+ return await tabGroupsClient.updateGroup({
349
+ groupId,
350
+ title: body.title,
351
+ color: body.color,
352
+ collapsed: body.collapsed,
353
+ });
354
+ });
355
+ if (result) {
356
+ if ("error" in result)
357
+ errorJson(res, result.error, 400);
358
+ else
359
+ json(res, result);
360
+ }
361
+ }
362
+ async function handleTabGroupsDelete(res, body) {
363
+ const result = await withMutex(res, async () => {
364
+ const groupId = body.groupId;
365
+ if (groupId === undefined)
366
+ return { error: "groupId is required" };
367
+ const tabs = await tabGroupsClient.listTabs();
368
+ const groupTabs = tabs.filter((t) => t.groupId === groupId);
369
+ if (groupTabs.length === 0)
370
+ return { message: `No tabs found in group ${groupId}` };
371
+ await tabGroupsClient.ungroupTabs(groupTabs.map((t) => t.id));
372
+ return { deleted: true, ungroupedTabs: groupTabs.length };
373
+ });
374
+ if (result) {
375
+ if ("error" in result)
376
+ errorJson(res, result.error, 400);
377
+ else
378
+ json(res, result);
379
+ }
380
+ }
381
+ // ---- HTTP Server ----
382
+ const server = createServer(async (req, res) => {
383
+ // CORS preflight
384
+ if (req.method === "OPTIONS") {
385
+ res.writeHead(204, {
386
+ "Access-Control-Allow-Origin": "*",
387
+ "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
388
+ "Access-Control-Allow-Headers": "Content-Type",
389
+ });
390
+ res.end();
391
+ return;
392
+ }
393
+ const url = new URL(req.url || "/", `http://localhost:${PORT}`);
394
+ const path = url.pathname;
395
+ try {
396
+ if (path === "/api/health" && req.method === "GET") {
397
+ json(res, { status: "ok", port: PORT, timestamp: new Date().toISOString() });
398
+ }
399
+ else if (path === "/api/connect" && req.method === "POST") {
400
+ await handleConnect(res);
401
+ }
402
+ else if (path === "/api/ask" && req.method === "POST") {
403
+ const body = await readBody(req);
404
+ await handleAsk(res, body);
405
+ }
406
+ else if (path === "/api/poll" && req.method === "GET") {
407
+ await handlePoll(res);
408
+ }
409
+ else if (path === "/api/stop" && req.method === "POST") {
410
+ await handleStop(res);
411
+ }
412
+ else if (path === "/api/screenshot" && req.method === "GET") {
413
+ await handleScreenshot(res);
414
+ }
415
+ else if (path === "/api/mode" && req.method === "POST") {
416
+ const body = await readBody(req);
417
+ await handleMode(res, body);
418
+ }
419
+ else if (path === "/api/tab-groups" && req.method === "GET") {
420
+ await handleTabGroupsList(res);
421
+ }
422
+ else if (path === "/api/tab-groups/tabs" && req.method === "GET") {
423
+ await handleTabGroupsListTabs(res);
424
+ }
425
+ else if (path === "/api/tab-groups" && req.method === "POST") {
426
+ const body = await readBody(req);
427
+ await handleTabGroupsCreate(res, body);
428
+ }
429
+ else if (path === "/api/tab-groups/update" && req.method === "POST") {
430
+ const body = await readBody(req);
431
+ await handleTabGroupsUpdate(res, body);
432
+ }
433
+ else if (path === "/api/tab-groups/delete" && req.method === "POST") {
434
+ const body = await readBody(req);
435
+ await handleTabGroupsDelete(res, body);
436
+ }
437
+ else {
438
+ errorJson(res, `Not found: ${req.method} ${path}`, 404);
439
+ }
440
+ }
441
+ catch (err) {
442
+ const message = err instanceof Error ? err.message : String(err);
443
+ console.error(`[${new Date().toISOString()}] Error on ${req.method} ${path}:`, message);
444
+ errorJson(res, message, 500);
445
+ }
446
+ });
447
+ server.listen(PORT, () => {
448
+ console.log(`Comet Bridge HTTP API listening on port ${PORT}`);
449
+ console.log(`Health check: http://localhost:${PORT}/api/health`);
450
+ console.log(`\nEndpoints:`);
451
+ console.log(` POST /api/connect - Start Comet & connect`);
452
+ console.log(` POST /api/ask - Send prompt {prompt, newChat?, timeout?}`);
453
+ console.log(` GET /api/poll - Check agent status`);
454
+ console.log(` POST /api/stop - Stop current agent`);
455
+ console.log(` GET /api/screenshot - Capture page screenshot`);
456
+ console.log(` POST /api/mode - Get/set Perplexity mode {mode?}`);
457
+ console.log(` GET /api/tab-groups - List all tab groups`);
458
+ console.log(` GET /api/tab-groups/tabs - List all tabs with group info`);
459
+ console.log(` POST /api/tab-groups - Create group {tabIds, title?, color?}`);
460
+ console.log(` POST /api/tab-groups/update - Update group {groupId, title?, color?, collapsed?}`);
461
+ console.log(` POST /api/tab-groups/delete - Delete group {groupId}`);
462
+ });
463
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":";AAEA,+BAA+B;AAC/B,uDAAuD;AACvD,6EAA6E;AAC7E,EAAE;AACF,gBAAgB;AAChB,uGAAuG;AAEvG,OAAO,EAAE,YAAY,EAAmC,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAEjE,oDAAoD;AACpD,IAAI,IAAI,GAAG,KAAK,CAAC;AAEjB,SAAS,IAAI,CAAC,GAAmB,EAAE,IAAa,EAAE,MAAM,GAAG,GAAG;IAC5D,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,kBAAkB;QAClC,6BAA6B,EAAE,GAAG;QAClC,8BAA8B,EAAE,oBAAoB;QACpD,8BAA8B,EAAE,cAAc;KAC/C,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,SAAS,CAAC,GAAmB,EAAE,OAAe,EAAE,MAAM,GAAG,GAAG;IACnE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAoB;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,EAAE,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAI,GAAmB,EAAE,EAAoB;IACnE,IAAI,IAAI,EAAE,CAAC;QACT,SAAS,CAAC,GAAG,EAAE,oEAAoE,EAAE,GAAG,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,IAAI,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,sEAAsE;AAEtE,KAAK,UAAU,aAAa,CAAC,GAAmB;IAC9C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAE1D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,IAAI,CAAC;oBAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAE5D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,WAAW,CAAC,QAAQ,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;YAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,GAAG,WAAW,sCAAsC,QAAQ,CAAC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1G,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACtE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,GAAG,WAAW,+CAA+C,EAAE,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAmB,EAAE,IAA6B;IACzE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAC;QACnC,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,KAAK,CAAC;QAClD,MAAM,OAAO,GAAI,IAAI,CAAC,OAAmB,IAAI,KAAK,CAAC;QAEnD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;QAC7C,CAAC;QAED,mBAAmB;QACnB,MAAM,GAAG,MAAM;aACZ,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;aAC/B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE,CAAC;QAEV,sBAAsB;QACtB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAC1D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,IAAI,CAAC;wBAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAC5D,IAAI,OAAO;gBAAE,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,WAAW,CAAC,QAAQ,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;YAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,KAAe,CAAC;YACpD,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC3C,MAAM,WAAW,CAAC,QAAQ,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;gBAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC;;;;;;;;;KASjD,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,KAA4C,CAAC;QAEpF,kBAAkB;QAClB,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEjC,sBAAsB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;YACxC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAE9C,MAAM,kBAAkB,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC;;;;;;;;;OASrD,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAA4C,CAAC;YAE5F,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,IAAI,YAAY,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;oBACnC,CAAC,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3E,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,cAAc,EAAE,CAAC;gBACpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,6CAA6C,EAAE,CAAC;YAC7G,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;QACnD,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,IAAI;YAC5C,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,IAAI,IAAI;YACtD,OAAO,EAAE,qBAAqB,cAAc,CAAC,MAAM,kDAAkD;SACtG,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAe,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAmB;IAC3C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;QAE9C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5D,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;YACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;SAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAmB;IAC3C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAmB;IACjD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAmB,EAAE,IAA6B;IAC1E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAC;QAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,sBAAsB;YACtB,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;OAiB7C,CAAC,CAAC;YACH,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,KAAe,EAAE,CAAC;QAC5D,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACjH,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,iBAAiB,IAAI,sCAAsC,EAAE,CAAC;QAChF,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACjD,MAAM,WAAW,CAAC,QAAQ,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC;;iEAEc,SAAS;;;;;;;;;;;;;KAarE,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,KAAqF,CAAC;QAExH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7C,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC;;;;yDAIG,IAAI;;;;;;;OAOtD,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,KAA6C,CAAC;YACpF,IAAI,SAAS,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,CAAC;YAC5E,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,qCAAqC,EAAE,CAAC;QAC7E,CAAC;QAED,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,CAAC;QACzE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,uBAAuB,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAe,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,qCAAqC;AAErC,KAAK,UAAU,mBAAmB,CAAC,GAAmB;IACpD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,IAAI,MAAM;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,GAAmB;IACxD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,IAAI,MAAM;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAmB,EAAE,IAA6B;IACrF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAkB,CAAC;QACvC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;QAC3E,OAAO,MAAM,eAAe,CAAC,WAAW,CAAC;YACvC,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,KAA2B;YACvC,KAAK,EAAE,IAAI,CAAC,KAAY;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM;YAAE,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAe,EAAE,GAAG,CAAC,CAAC;;YACxE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAmB,EAAE,IAA6B;IACrF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;QACnE,OAAO,MAAM,eAAe,CAAC,WAAW,CAAC;YACvC,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAA2B;YACvC,KAAK,EAAE,IAAI,CAAC,KAAY;YACxB,SAAS,EAAE,IAAI,CAAC,SAAgC;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,OAAO,IAAI,MAAM;YAAE,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAe,EAAE,GAAG,CAAC,CAAC;;YAC9D,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAmB,EAAE,IAA6B;IACrF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,0BAA0B,OAAO,EAAE,EAAE,CAAC;QACpF,MAAM,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,OAAO,IAAI,MAAM;YAAE,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAe,EAAE,GAAG,CAAC,CAAC;;YAC9D,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,wBAAwB;AAExB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;IAC9E,iBAAiB;IACjB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,6BAA6B,EAAE,GAAG;YAClC,8BAA8B,EAAE,oBAAoB;YACpD,8BAA8B,EAAE,cAAc;SAC/C,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE1B,IAAI,CAAC;QACH,IAAI,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACnD,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC/E,CAAC;aAAM,IAAI,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5D,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxD,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC9D,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC9D,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,IAAI,KAAK,sBAAsB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACnE,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,IAAI,KAAK,wBAAwB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,IAAI,KAAK,wBAAwB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,cAAc,GAAG,CAAC,MAAM,IAAI,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;QACxF,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACvB,OAAO,CAAC,GAAG,CAAC,2CAA2C,IAAI,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,aAAa,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;IAClG,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}