@4via6/relay 1.0.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.
Files changed (99) hide show
  1. package/.env.example +50 -0
  2. package/README.md +253 -0
  3. package/dist/auth.d.ts +3 -0
  4. package/dist/auth.js +32 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/bot.d.ts +2 -0
  7. package/dist/bot.js +14 -0
  8. package/dist/bot.js.map +1 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.js +3 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/admin.d.ts +2 -0
  13. package/dist/commands/admin.js +420 -0
  14. package/dist/commands/admin.js.map +1 -0
  15. package/dist/commands/chat.d.ts +2 -0
  16. package/dist/commands/chat.js +80 -0
  17. package/dist/commands/chat.js.map +1 -0
  18. package/dist/commands/files.d.ts +2 -0
  19. package/dist/commands/files.js +162 -0
  20. package/dist/commands/files.js.map +1 -0
  21. package/dist/commands/history.d.ts +2 -0
  22. package/dist/commands/history.js +152 -0
  23. package/dist/commands/history.js.map +1 -0
  24. package/dist/commands/index.d.ts +2 -0
  25. package/dist/commands/index.js +21 -0
  26. package/dist/commands/index.js.map +1 -0
  27. package/dist/commands/mcp.d.ts +2 -0
  28. package/dist/commands/mcp.js +105 -0
  29. package/dist/commands/mcp.js.map +1 -0
  30. package/dist/commands/media.d.ts +2 -0
  31. package/dist/commands/media.js +248 -0
  32. package/dist/commands/media.js.map +1 -0
  33. package/dist/commands/monitor.d.ts +2 -0
  34. package/dist/commands/monitor.js +136 -0
  35. package/dist/commands/monitor.js.map +1 -0
  36. package/dist/commands/session.d.ts +2 -0
  37. package/dist/commands/session.js +114 -0
  38. package/dist/commands/session.js.map +1 -0
  39. package/dist/commands/shell.d.ts +2 -0
  40. package/dist/commands/shell.js +90 -0
  41. package/dist/commands/shell.js.map +1 -0
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +82 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/providers/claude.d.ts +52 -0
  46. package/dist/providers/claude.js +449 -0
  47. package/dist/providers/claude.js.map +1 -0
  48. package/dist/providers/codex.d.ts +45 -0
  49. package/dist/providers/codex.js +400 -0
  50. package/dist/providers/codex.js.map +1 -0
  51. package/dist/providers/index.d.ts +6 -0
  52. package/dist/providers/index.js +40 -0
  53. package/dist/providers/index.js.map +1 -0
  54. package/dist/providers/opencode.d.ts +40 -0
  55. package/dist/providers/opencode.js +498 -0
  56. package/dist/providers/opencode.js.map +1 -0
  57. package/dist/providers/types.d.ts +173 -0
  58. package/dist/providers/types.js +6 -0
  59. package/dist/providers/types.js.map +1 -0
  60. package/dist/session.d.ts +10 -0
  61. package/dist/session.js +65 -0
  62. package/dist/session.js.map +1 -0
  63. package/dist/utils/chunker.d.ts +1 -0
  64. package/dist/utils/chunker.js +24 -0
  65. package/dist/utils/chunker.js.map +1 -0
  66. package/dist/utils/errors.d.ts +12 -0
  67. package/dist/utils/errors.js +85 -0
  68. package/dist/utils/errors.js.map +1 -0
  69. package/dist/utils/files.d.ts +15 -0
  70. package/dist/utils/files.js +81 -0
  71. package/dist/utils/files.js.map +1 -0
  72. package/dist/utils/html.d.ts +4 -0
  73. package/dist/utils/html.js +10 -0
  74. package/dist/utils/html.js.map +1 -0
  75. package/dist/utils/media.d.ts +15 -0
  76. package/dist/utils/media.js +103 -0
  77. package/dist/utils/media.js.map +1 -0
  78. package/dist/utils/store.d.ts +15 -0
  79. package/dist/utils/store.js +44 -0
  80. package/dist/utils/store.js.map +1 -0
  81. package/dist/utils/stream.d.ts +21 -0
  82. package/dist/utils/stream.js +149 -0
  83. package/dist/utils/stream.js.map +1 -0
  84. package/dist/utils/stt.d.ts +7 -0
  85. package/dist/utils/stt.js +118 -0
  86. package/dist/utils/stt.js.map +1 -0
  87. package/dist/utils/system-prompt.d.ts +5 -0
  88. package/dist/utils/system-prompt.js +64 -0
  89. package/dist/utils/system-prompt.js.map +1 -0
  90. package/dist/utils/timeout.d.ts +2 -0
  91. package/dist/utils/timeout.js +18 -0
  92. package/dist/utils/timeout.js.map +1 -0
  93. package/docs/commands.md +351 -0
  94. package/docs/configuration.md +160 -0
  95. package/docs/features.md +443 -0
  96. package/docs/getting-started.md +102 -0
  97. package/docs/providers.md +236 -0
  98. package/docs/troubleshooting.md +287 -0
  99. package/package.json +54 -0
@@ -0,0 +1,498 @@
1
+ import { createOpencode, createOpencodeClient, } from "@opencode-ai/sdk";
2
+ let client;
3
+ let serverClose;
4
+ export class OpenCodeProvider {
5
+ name = "opencode";
6
+ capabilities = {
7
+ streaming: true,
8
+ todos: true,
9
+ diff: true,
10
+ fork: true,
11
+ revert: true,
12
+ share: true,
13
+ summarize: true,
14
+ history: true,
15
+ fileOps: true,
16
+ shell: true,
17
+ commands: true,
18
+ fileOutput: true,
19
+ mcp: true,
20
+ };
21
+ async init() {
22
+ const mode = process.env.OPENCODE_MODE ?? "start";
23
+ if (mode === "connect") {
24
+ const baseUrl = process.env.OPENCODE_URL ?? "http://localhost:4096";
25
+ try {
26
+ const url = new URL(baseUrl);
27
+ if (url.protocol === "http:" &&
28
+ !["localhost", "127.0.0.1", "[::1]"].includes(url.hostname)) {
29
+ console.warn("WARNING: Connecting to remote OpenCode server over HTTP (unencrypted). Use HTTPS for production.");
30
+ }
31
+ }
32
+ catch {
33
+ // Invalid URL — will fail on createOpencodeClient
34
+ }
35
+ client = createOpencodeClient({ baseUrl });
36
+ }
37
+ else {
38
+ const hostname = process.env.OPENCODE_HOSTNAME ?? "127.0.0.1";
39
+ const port = Number(process.env.OPENCODE_PORT) || 4096;
40
+ const result = await createOpencode({ hostname, port });
41
+ client = result.client;
42
+ serverClose = result.server.close;
43
+ }
44
+ }
45
+ shutdown() {
46
+ serverClose?.();
47
+ }
48
+ // --- Sessions ---
49
+ async createSession(title) {
50
+ const result = await client.session.create({
51
+ body: { title: title ?? "Telegram Session" },
52
+ });
53
+ if (result.data) {
54
+ return { id: result.data.id, title: result.data.title };
55
+ }
56
+ throw new Error("Failed to create session");
57
+ }
58
+ async listSessions() {
59
+ const result = await client.session.list();
60
+ if (result.error)
61
+ throw sdkError(result.error);
62
+ return (result.data ?? []).map((s) => ({
63
+ id: s.id,
64
+ title: s.title,
65
+ lastModified: s.time?.updated,
66
+ }));
67
+ }
68
+ async getSession(id) {
69
+ const result = await client.session.get({ path: { id } });
70
+ if (result.error)
71
+ return null;
72
+ const s = result.data;
73
+ return { id: s.id, title: s.title };
74
+ }
75
+ async deleteSession(id) {
76
+ try {
77
+ await client.session.delete({ path: { id } });
78
+ return true;
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ }
84
+ // --- Messaging ---
85
+ async prompt(sessionId, text, options) {
86
+ const body = {
87
+ parts: options?.parts ?? [{ type: "text", text }],
88
+ };
89
+ if (options?.model)
90
+ body.model = options.model;
91
+ if (options?.system)
92
+ body.system = options.system;
93
+ const result = await client.session.prompt({
94
+ path: { id: sessionId },
95
+ body,
96
+ });
97
+ if (result.error)
98
+ throw sdkError(result.error);
99
+ return {
100
+ text: formatPartsToText(result.data?.parts ?? []),
101
+ parts: result.data?.parts,
102
+ raw: result.data,
103
+ };
104
+ }
105
+ async abort(sessionId) {
106
+ await client.session.abort({ path: { id: sessionId } });
107
+ }
108
+ // --- Streaming ---
109
+ async *promptStream(sessionId, text, options) {
110
+ const body = {
111
+ parts: options?.parts ?? [{ type: "text", text }],
112
+ };
113
+ if (options?.model)
114
+ body.model = options.model;
115
+ if (options?.system)
116
+ body.system = options.system;
117
+ await client.session.promptAsync({
118
+ path: { id: sessionId },
119
+ body,
120
+ });
121
+ const sseResult = await client.event.subscribe();
122
+ for await (const event of sseResult.stream) {
123
+ const evt = event;
124
+ if (!matchesSession(evt, sessionId))
125
+ continue;
126
+ if (evt.type === "message.part.updated") {
127
+ const { part, delta } = evt.properties;
128
+ if (part.type === "text") {
129
+ if (delta) {
130
+ yield { type: "text", content: delta };
131
+ }
132
+ }
133
+ else if (part.type === "file") {
134
+ yield {
135
+ type: "file",
136
+ content: part.filename ?? "file",
137
+ file: { mime: part.mime, filename: part.filename ?? "file", url: part.url },
138
+ };
139
+ }
140
+ else if (part.type === "tool") {
141
+ const toolName = part.tool;
142
+ if (part.state.status === "running") {
143
+ yield { type: "tool_use", content: `[${part.state.title || toolName}...]` };
144
+ }
145
+ else if (part.state.status === "completed") {
146
+ yield { type: "tool_use", content: `[${part.state.title || toolName} done]` };
147
+ }
148
+ else if (part.state.status === "error") {
149
+ yield { type: "tool_use", content: `[${toolName} error]` };
150
+ }
151
+ }
152
+ }
153
+ else if (evt.type === "session.idle") {
154
+ yield { type: "done", content: "" };
155
+ break;
156
+ }
157
+ else if (evt.type === "session.error") {
158
+ const rawError = evt.properties.error ?? "Unknown session error";
159
+ yield { type: "text", content: `Error: ${rawError}` };
160
+ yield { type: "done", content: "" };
161
+ break;
162
+ }
163
+ }
164
+ }
165
+ // --- Session features ---
166
+ async getTodos(sessionId) {
167
+ const result = await client.session.todo({ path: { id: sessionId } });
168
+ if (result.error)
169
+ throw sdkError(result.error);
170
+ return (result.data ?? []).map((t) => ({
171
+ content: t.content,
172
+ status: t.status,
173
+ priority: t.priority,
174
+ id: t.id,
175
+ }));
176
+ }
177
+ async getDiff(sessionId) {
178
+ const result = await client.session.diff({ path: { id: sessionId } });
179
+ if (result.error)
180
+ throw sdkError(result.error);
181
+ return (result.data ?? []).map((d) => ({
182
+ file: d.file,
183
+ additions: d.additions ?? 0,
184
+ deletions: d.deletions ?? 0,
185
+ before: d.before,
186
+ after: d.after,
187
+ }));
188
+ }
189
+ async forkSession(sessionId, messageId) {
190
+ const result = await client.session.fork({
191
+ path: { id: sessionId },
192
+ body: { messageID: messageId },
193
+ });
194
+ if (result.error)
195
+ throw sdkError(result.error);
196
+ const forked = result.data;
197
+ return { id: forked.id, title: forked.title };
198
+ }
199
+ async revert(sessionId) {
200
+ // Get last assistant message ID
201
+ const msgsResult = await client.session.messages({
202
+ path: { id: sessionId },
203
+ });
204
+ const messages = msgsResult.data ?? [];
205
+ const lastAssistant = [...messages]
206
+ .reverse()
207
+ .find((m) => m.info?.role === "assistant");
208
+ if (!lastAssistant)
209
+ return false;
210
+ const messageID = lastAssistant.info?.id;
211
+ if (!messageID)
212
+ return false;
213
+ const result = await client.session.revert({
214
+ path: { id: sessionId },
215
+ body: { messageID },
216
+ });
217
+ if (result.error)
218
+ throw sdkError(result.error);
219
+ return true;
220
+ }
221
+ async unrevert(sessionId) {
222
+ try {
223
+ await client.session.unrevert({ path: { id: sessionId } });
224
+ return true;
225
+ }
226
+ catch {
227
+ return false;
228
+ }
229
+ }
230
+ async share(sessionId) {
231
+ const result = await client.session.share({
232
+ path: { id: sessionId },
233
+ });
234
+ if (result.error)
235
+ throw sdkError(result.error);
236
+ return result.data?.share?.url ?? null;
237
+ }
238
+ async summarize(sessionId) {
239
+ try {
240
+ await client.session.summarize({ path: { id: sessionId } });
241
+ return true;
242
+ }
243
+ catch {
244
+ return false;
245
+ }
246
+ }
247
+ async getHistory(sessionId) {
248
+ const result = await client.session.messages({
249
+ path: { id: sessionId },
250
+ });
251
+ if (result.error)
252
+ throw sdkError(result.error);
253
+ return result.data ?? [];
254
+ }
255
+ // --- File operations ---
256
+ async readFile(path) {
257
+ const result = await client.file.read({ query: { path } });
258
+ if (result.error)
259
+ throw sdkError(result.error);
260
+ const fileData = result.data;
261
+ return fileData?.content ?? JSON.stringify(fileData, null, 2);
262
+ }
263
+ async findFiles(query) {
264
+ const result = await client.find.files({ query: { query } });
265
+ if (result.error)
266
+ throw sdkError(result.error);
267
+ return (result.data ?? []);
268
+ }
269
+ async searchText(pattern) {
270
+ const result = await client.find.text({ query: { pattern } });
271
+ if (result.error)
272
+ throw sdkError(result.error);
273
+ return (result.data ?? []).map((m) => ({
274
+ file: m.path?.text ?? "",
275
+ line: m.line_number,
276
+ text: m.lines?.text?.trim(),
277
+ }));
278
+ }
279
+ async findSymbols(query) {
280
+ const result = await client.find.symbols({ query: { query } });
281
+ if (result.error)
282
+ throw sdkError(result.error);
283
+ return result.data ?? [];
284
+ }
285
+ async getFileStatus() {
286
+ const result = await client.file.status();
287
+ if (result.error)
288
+ throw sdkError(result.error);
289
+ return (result.data ?? []).map((f) => ({
290
+ path: f.path ?? String(f),
291
+ status: f.status ?? "?",
292
+ }));
293
+ }
294
+ // --- Shell ---
295
+ async shell(sessionId, command) {
296
+ const result = await client.session.shell({
297
+ path: { id: sessionId },
298
+ body: { command, agent: "default" },
299
+ });
300
+ if (result.error)
301
+ throw sdkError(result.error);
302
+ const data = result.data;
303
+ return data?.modelID
304
+ ? `Shell command completed (model: ${data.modelID}).`
305
+ : "Shell command completed.";
306
+ }
307
+ async runCommand(sessionId, command, args) {
308
+ const result = await client.session.command({
309
+ path: { id: sessionId },
310
+ body: { command, arguments: args ?? "", agent: "build" },
311
+ });
312
+ if (result.error)
313
+ throw sdkError(result.error);
314
+ return {
315
+ text: formatPartsToText(result.data?.parts ?? []),
316
+ parts: result.data?.parts,
317
+ raw: result.data,
318
+ };
319
+ }
320
+ // --- Info ---
321
+ async getProjectInfo() {
322
+ const [projResult, pathResult, vcsResult] = await Promise.all([
323
+ client.project.current(),
324
+ client.path.get(),
325
+ client.vcs.get(),
326
+ ]);
327
+ if (projResult.error)
328
+ throw sdkError(projResult.error);
329
+ const proj = projResult.data;
330
+ const paths = pathResult.data;
331
+ const vcs = vcsResult.data;
332
+ return {
333
+ id: proj?.id,
334
+ worktree: proj?.worktree,
335
+ directory: paths?.directory,
336
+ vcs: proj?.vcs,
337
+ branch: vcs?.branch,
338
+ };
339
+ }
340
+ async getTools() {
341
+ const result = await client.tool.ids();
342
+ if (result.error)
343
+ throw sdkError(result.error);
344
+ return (result.data ?? []);
345
+ }
346
+ async getCommands() {
347
+ const result = await client.command.list();
348
+ if (result.error)
349
+ throw sdkError(result.error);
350
+ return (result.data ?? []).map((c) => ({
351
+ name: c.name,
352
+ description: c.description,
353
+ }));
354
+ }
355
+ async getHealth() {
356
+ const [configResult, projResult, vcsResult] = await Promise.all([
357
+ client.config.get(),
358
+ client.project.current(),
359
+ client.vcs.get(),
360
+ ]);
361
+ const proj = projResult.data;
362
+ const vcs = vcsResult.data;
363
+ return {
364
+ status: configResult.error ? "Error" : "Healthy",
365
+ provider: "opencode",
366
+ project: proj?.worktree,
367
+ branch: vcs?.branch,
368
+ };
369
+ }
370
+ async getConfig() {
371
+ const result = await client.config.get();
372
+ if (result.error)
373
+ throw sdkError(result.error);
374
+ return result.data;
375
+ }
376
+ async getProviders() {
377
+ const result = await client.config.providers();
378
+ if (result.error)
379
+ throw sdkError(result.error);
380
+ return result.data;
381
+ }
382
+ async getAgents() {
383
+ const result = await client.app.agents();
384
+ if (result.error)
385
+ throw sdkError(result.error);
386
+ const agents = result.data ?? [];
387
+ return Array.isArray(agents) ? agents : [];
388
+ }
389
+ // --- Models ---
390
+ async listModels() {
391
+ const result = await client.config.providers();
392
+ if (result.error)
393
+ throw sdkError(result.error);
394
+ const data = result.data;
395
+ const providers = data?.all ?? data?.providers ?? [];
396
+ const models = [];
397
+ for (const prov of providers) {
398
+ if (!prov.models)
399
+ continue;
400
+ for (const [key, m] of Object.entries(prov.models)) {
401
+ models.push({
402
+ id: m.id ?? key,
403
+ name: m.name ?? key,
404
+ provider: prov.id ?? prov.name ?? "unknown",
405
+ reasoning: m.reasoning ?? m.capabilities?.reasoning ?? false,
406
+ attachment: m.attachment ?? m.capabilities?.attachment ?? false,
407
+ modalities: m.modalities,
408
+ active: false, // Caller checks against selected model
409
+ });
410
+ }
411
+ }
412
+ return models;
413
+ }
414
+ // --- MCP ---
415
+ async getMcpStatus() {
416
+ const result = await client.mcp.status();
417
+ if (result.error)
418
+ throw sdkError(result.error);
419
+ const data = result.data;
420
+ if (!data)
421
+ return [];
422
+ return Object.entries(data).map(([name, status]) => {
423
+ let statusStr = "unknown";
424
+ if (status?.status === "connected")
425
+ statusStr = "connected";
426
+ else if (status?.status === "disabled")
427
+ statusStr = "disabled";
428
+ else if (status?.status === "failed")
429
+ statusStr = "failed";
430
+ else if (status?.status === "needs_auth")
431
+ statusStr = "needs_auth";
432
+ return {
433
+ name,
434
+ status: statusStr,
435
+ error: status?.error,
436
+ };
437
+ });
438
+ }
439
+ async addMcpServer(name, config) {
440
+ const sdkConfig = config.type === "local"
441
+ ? { type: "local", command: config.command ?? [], environment: config.environment, enabled: config.enabled ?? true, timeout: config.timeout }
442
+ : { type: "remote", url: config.url ?? "", headers: config.headers, enabled: config.enabled ?? true, timeout: config.timeout };
443
+ const result = await client.mcp.add({ body: { name, config: sdkConfig } });
444
+ if (result.error)
445
+ throw sdkError(result.error);
446
+ return true;
447
+ }
448
+ async removeMcpServer(name) {
449
+ try {
450
+ await client.mcp.disconnect({ path: { name } });
451
+ return true;
452
+ }
453
+ catch {
454
+ return false;
455
+ }
456
+ }
457
+ }
458
+ // --- Helpers ---
459
+ function sdkError(error) {
460
+ if (typeof error === "string")
461
+ return new Error(error);
462
+ if (error?.message)
463
+ return new Error(error.message);
464
+ return new Error(JSON.stringify(error));
465
+ }
466
+ function matchesSession(evt, sessionId) {
467
+ const props = evt.properties;
468
+ return props?.sessionID === sessionId || props?.session_id === sessionId;
469
+ }
470
+ function formatPartsToText(parts) {
471
+ const sections = [];
472
+ for (const part of parts) {
473
+ if (part.type === "text") {
474
+ sections.push(part.text);
475
+ }
476
+ else if (part.type === "tool") {
477
+ const toolName = part.tool;
478
+ if (part.state?.status === "completed") {
479
+ const output = part.state.output;
480
+ const title = part.state.title || toolName;
481
+ if (output && output.length > 0) {
482
+ sections.push(`**[${title}]**\n\`\`\`\n${output.length > 1000 ? output.slice(0, 1000) + "\n... (truncated)" : output}\n\`\`\``);
483
+ }
484
+ else {
485
+ sections.push(`**[${title}]** ✓`);
486
+ }
487
+ }
488
+ else if (part.state?.status === "error") {
489
+ sections.push(`**[${toolName}]** Error: ${part.state.error}`);
490
+ }
491
+ }
492
+ else if (part.type === "file") {
493
+ sections.push(`📄 ${part.filename ?? "file"}`);
494
+ }
495
+ }
496
+ return sections.join("\n\n") || "(empty response)";
497
+ }
498
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,GAErB,MAAM,kBAAkB,CAAC;AAsB1B,IAAI,MAAsB,CAAC;AAC3B,IAAI,WAAqC,CAAC;AAE1C,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,UAAmB,CAAC;IAC3B,YAAY,GAAyB;QAC5C,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,GAAG,EAAE,IAAI;KACV,CAAC;IAEF,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC;QAElD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,uBAAuB,CAAC;YACpE,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC7B,IACE,GAAG,CAAC,QAAQ,KAAK,OAAO;oBACxB,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC3D,CAAC;oBACD,OAAO,CAAC,IAAI,CACV,kGAAkG,CACnG,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;YACD,MAAM,GAAG,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,WAAW,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,CAAC;IACH,CAAC;IAED,QAAQ;QACN,WAAW,EAAE,EAAE,CAAC;IAClB,CAAC;IAED,mBAAmB;IAEnB,KAAK,CAAC,aAAa,CAAC,KAAc;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACzC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,kBAAkB,EAAE;SAC7C,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACrD,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO;SAC9B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAW,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,oBAAoB;IAEpB,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,IAAY,EACZ,OAAuB;QAEvB,MAAM,IAAI,GAAQ;YAChB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClD,CAAC;QACF,IAAI,OAAO,EAAE,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/C,IAAI,OAAO,EAAE,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACzC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/C,OAAO;YACL,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACjD,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK;YACzB,GAAG,EAAE,MAAM,CAAC,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB;QAC3B,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,oBAAoB;IAEpB,KAAK,CAAC,CAAC,YAAY,CACjB,SAAiB,EACjB,IAAY,EACZ,OAAuB;QAEvB,MAAM,IAAI,GAAQ;YAChB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClD,CAAC;QACF,IAAI,OAAO,EAAE,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/C,IAAI,OAAO,EAAE,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAElD,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/B,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,KAAgB,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC;gBAAE,SAAS;YAE9C,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBACxC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;gBACvC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACzB,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;oBACzC,CAAC;gBACH,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAChC,MAAM;wBACJ,IAAI,EAAE,MAAe;wBACrB,OAAO,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM;wBAChC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;qBAC5E,CAAC;gBACJ,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;oBAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACpC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,MAAM,EAAE,CAAC;oBAC9E,CAAC;yBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;wBAC7C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,QAAQ,EAAE,CAAC;oBAChF,CAAC;yBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;wBACzC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,QAAQ,SAAS,EAAE,CAAC;oBAC7D,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBACpC,MAAM;YACR,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAI,GAAG,CAAC,UAAkB,CAAC,KAAK,IAAI,uBAAuB,CAAC;gBAC1E,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,QAAQ,EAAE,EAAE,CAAC;gBACtD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBACpC,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAE3B,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,EAAE,EAAE,CAAC,CAAC,EAAE;SACT,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC;YAC3B,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC;YAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CACf,SAAiB,EACjB,SAAkB;QAElB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YACvC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;SAC/B,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAW,CAAC;QAClC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,gCAAgC;QAChC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/C,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;SACxB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,CAAC,GAAG,QAAQ,CAAC;aAChC,OAAO,EAAE;aACT,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QAEjC,MAAM,SAAS,GAAI,aAAqB,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAE7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACzC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE,EAAE,SAAS,EAAE;SACpB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB;QAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAQ,MAAM,CAAC,IAAY,EAAE,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC3C,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,0BAA0B;IAE1B,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAW,CAAC;QACpC,OAAO,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAa,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAS,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE;YACxB,IAAI,EAAE,CAAC,CAAC,WAAW;YACnB,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;SAC5B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG;SACxB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gBAAgB;IAEhB,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,OAAe;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;SACpC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAW,CAAC;QAChC,OAAO,IAAI,EAAE,OAAO;YAClB,CAAC,CAAC,mCAAmC,IAAI,CAAC,OAAO,IAAI;YACrD,CAAC,CAAC,0BAA0B,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU,CACd,SAAiB,EACjB,OAAe,EACf,IAAa;QAEb,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1C,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;SACzD,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO;YACL,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACjD,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK;YACzB,GAAG,EAAE,MAAM,CAAC,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,eAAe;IAEf,KAAK,CAAC,cAAc;QAClB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5D,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;YACxB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;SACjB,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAW,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAW,CAAC;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAW,CAAC;QAElC,OAAO;YACL,EAAE,EAAE,IAAI,EAAE,EAAE;YACZ,QAAQ,EAAE,IAAI,EAAE,QAAQ;YACxB,SAAS,EAAE,KAAK,EAAE,SAAS;YAC3B,GAAG,EAAE,IAAI,EAAE,GAAG;YACd,MAAM,EAAE,GAAG,EAAE,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAa,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;YACnB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;SACjB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,UAAU,CAAC,IAAW,CAAC;QACpC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAW,CAAC;QAElC,OAAO;YACL,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAChD,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,IAAI,EAAE,QAAQ;YACvB,MAAM,EAAE,GAAG,EAAE,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/C,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,CAAC;IAED,iBAAiB;IAEjB,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/C,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAW,CAAC;QAChC,MAAM,SAAS,GAAU,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAkB,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,SAAS;YAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAoB,EAAE,CAAC;gBACtE,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG;oBACf,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG;oBACnB,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS;oBAC3C,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,YAAY,EAAE,SAAS,IAAI,KAAK;oBAC5D,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,IAAI,KAAK;oBAC/D,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,MAAM,EAAE,KAAK,EAAE,uCAAuC;iBACvD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc;IAEd,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAuC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;YACjD,IAAI,SAAS,GAA8B,SAAS,CAAC;YACrD,IAAI,MAAM,EAAE,MAAM,KAAK,WAAW;gBAAE,SAAS,GAAG,WAAW,CAAC;iBACvD,IAAI,MAAM,EAAE,MAAM,KAAK,UAAU;gBAAE,SAAS,GAAG,UAAU,CAAC;iBAC1D,IAAI,MAAM,EAAE,MAAM,KAAK,QAAQ;gBAAE,SAAS,GAAG,QAAQ,CAAC;iBACtD,IAAI,MAAM,EAAE,MAAM,KAAK,YAAY;gBAAE,SAAS,GAAG,YAAY,CAAC;YAEnE,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,MAAM,EAAE,KAAK;aACrB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAAuB;QACtD,MAAM,SAAS,GAAQ,MAAM,CAAC,IAAI,KAAK,OAAO;YAC5C,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;YAC7I,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjI,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED,kBAAkB;AAElB,SAAS,QAAQ,CAAC,KAAU;IAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,KAAK,EAAE,OAAO;QAAE,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,GAAY,EAAE,SAAiB;IACrD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAiB,CAAC;IACpC,OAAO,KAAK,EAAE,SAAS,KAAK,SAAS,IAAI,KAAK,EAAE,UAAU,KAAK,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAY;IACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC;gBAC3C,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,QAAQ,CAAC,IAAI,CACX,MAAM,KAAK,gBAAgB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,UAAU,CACjH,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,MAAM,QAAQ,cAAc,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC;AACrD,CAAC"}