@keyou007/agent-bot 0.1.14-alpha.0 → 0.1.14-alpha.2

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 (113) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +82 -55
  3. package/README.zh.md +82 -55
  4. package/config.example.yaml +5 -1
  5. package/dist/cli/AutostartManager.js +431 -0
  6. package/dist/cli/AutostartManager.js.map +1 -0
  7. package/dist/cli/FeishuAppConfiguration.js +17 -13
  8. package/dist/cli/FeishuAppConfiguration.js.map +1 -1
  9. package/dist/cli/Initializer.js +35 -0
  10. package/dist/cli/Initializer.js.map +1 -1
  11. package/dist/cli/SelfUpdateRunner.js +552 -0
  12. package/dist/cli/SelfUpdateRunner.js.map +1 -0
  13. package/dist/cli/SelfUpdater.js +431 -0
  14. package/dist/cli/SelfUpdater.js.map +1 -0
  15. package/dist/cli/autostartOutput.js +63 -0
  16. package/dist/cli/autostartOutput.js.map +1 -0
  17. package/dist/cli/controlProtocol.js.map +1 -1
  18. package/dist/cli/help.js +92 -18
  19. package/dist/cli/help.js.map +1 -1
  20. package/dist/cli/taskGroupOptions.js +14 -11
  21. package/dist/cli/taskGroupOptions.js.map +1 -1
  22. package/dist/cli/taskListOutput.js +3 -0
  23. package/dist/cli/taskListOutput.js.map +1 -1
  24. package/dist/cli/taskTarget.js +99 -0
  25. package/dist/cli/taskTarget.js.map +1 -0
  26. package/dist/cli.js +643 -58
  27. package/dist/cli.js.map +1 -1
  28. package/dist/codex/CodexRuntime.js +16 -5
  29. package/dist/codex/CodexRuntime.js.map +1 -1
  30. package/dist/commands/CommandRouter.js +20 -1
  31. package/dist/commands/CommandRouter.js.map +1 -1
  32. package/dist/config/loadConfig.js +2 -0
  33. package/dist/config/loadConfig.js.map +1 -1
  34. package/dist/config/schema.js +2 -0
  35. package/dist/config/schema.js.map +1 -1
  36. package/dist/console/ConsoleTurnPresenter.js +2 -0
  37. package/dist/console/ConsoleTurnPresenter.js.map +1 -1
  38. package/dist/feishu/CardRenderer.js +584 -16
  39. package/dist/feishu/CardRenderer.js.map +1 -1
  40. package/dist/feishu/FeishuConnector.js +29 -8
  41. package/dist/feishu/FeishuConnector.js.map +1 -1
  42. package/dist/feishu/FeishuMarkdown.js +25 -1
  43. package/dist/feishu/FeishuMarkdown.js.map +1 -1
  44. package/dist/feishu/FeishuMessageClient.js +43 -0
  45. package/dist/feishu/FeishuMessageClient.js.map +1 -1
  46. package/dist/feishu/FeishuTurnPresenter.js +29 -1
  47. package/dist/feishu/FeishuTurnPresenter.js.map +1 -1
  48. package/dist/feishu/ownerAccess.js +7 -0
  49. package/dist/feishu/ownerAccess.js.map +1 -0
  50. package/dist/index.js +148 -19
  51. package/dist/index.js.map +1 -1
  52. package/dist/presentation/OutboundRouter.js +19 -1
  53. package/dist/presentation/OutboundRouter.js.map +1 -1
  54. package/dist/proxy/ProxySessionController.js +1444 -66
  55. package/dist/proxy/ProxySessionController.js.map +1 -1
  56. package/dist/startup/StartupNotifier.js +65 -16
  57. package/dist/startup/StartupNotifier.js.map +1 -1
  58. package/dist/startup/startFeishu.js +2 -2
  59. package/dist/startup/startFeishu.js.map +1 -1
  60. package/dist/state/StateStore.js +268 -67
  61. package/dist/state/StateStore.js.map +1 -1
  62. package/dist/state/migrations.js +26 -0
  63. package/dist/state/migrations.js.map +1 -1
  64. package/dist/supervision/SafeRestartNotifier.js +17 -16
  65. package/dist/supervision/SafeRestartNotifier.js.map +1 -1
  66. package/dist/supervision/SafeRestartScheduler.js +12 -7
  67. package/dist/supervision/SafeRestartScheduler.js.map +1 -1
  68. package/dist/supervision/replacementSupervisor.js +45 -4
  69. package/dist/supervision/replacementSupervisor.js.map +1 -1
  70. package/dist/supervisor.js +30 -18
  71. package/dist/supervisor.js.map +1 -1
  72. package/docs/technical-reference.md +33 -10
  73. package/docs/technical-reference.zh.md +33 -10
  74. package/npm-shrinkwrap.json +2 -2
  75. package/package.json +2 -2
  76. package/skills/agent-bot/SKILL.md +107 -182
  77. package/src/cli/AutostartManager.ts +579 -0
  78. package/src/cli/FeishuAppConfiguration.ts +22 -7
  79. package/src/cli/Initializer.ts +57 -0
  80. package/src/cli/SelfUpdateRunner.ts +817 -0
  81. package/src/cli/SelfUpdater.ts +688 -0
  82. package/src/cli/autostartOutput.ts +75 -0
  83. package/src/cli/controlProtocol.ts +111 -1
  84. package/src/cli/help.ts +92 -18
  85. package/src/cli/taskGroupOptions.ts +27 -17
  86. package/src/cli/taskListOutput.ts +10 -0
  87. package/src/cli/taskTarget.ts +168 -0
  88. package/src/cli.ts +781 -65
  89. package/src/codex/CodexRuntime.ts +17 -5
  90. package/src/commands/CommandRouter.ts +19 -1
  91. package/src/commands/commandTypes.ts +3 -0
  92. package/src/config/loadConfig.ts +2 -0
  93. package/src/config/schema.ts +2 -0
  94. package/src/console/ConsoleTurnPresenter.ts +4 -1
  95. package/src/feishu/CardRenderer.ts +716 -16
  96. package/src/feishu/FeishuConnector.ts +44 -10
  97. package/src/feishu/FeishuMarkdown.ts +27 -1
  98. package/src/feishu/FeishuMessageClient.ts +58 -0
  99. package/src/feishu/FeishuTurnPresenter.ts +35 -2
  100. package/src/feishu/ownerAccess.ts +7 -0
  101. package/src/feishu/types.ts +7 -0
  102. package/src/index.ts +192 -22
  103. package/src/presentation/OutboundRouter.ts +28 -3
  104. package/src/proxy/ProxySessionController.ts +1707 -70
  105. package/src/runtime/types.ts +1 -0
  106. package/src/startup/StartupNotifier.ts +67 -17
  107. package/src/startup/startFeishu.ts +5 -3
  108. package/src/state/StateStore.ts +413 -65
  109. package/src/state/migrations.ts +26 -0
  110. package/src/supervision/SafeRestartNotifier.ts +17 -17
  111. package/src/supervision/SafeRestartScheduler.ts +13 -6
  112. package/src/supervision/replacementSupervisor.ts +50 -4
  113. package/src/supervisor.ts +35 -16
@@ -0,0 +1,552 @@
1
+ import { spawn, spawnSync } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import net from "node:net";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ export const SELF_UPDATE_PLAN_VERSION = 1;
7
+ export async function applySelfUpdatePlan(plan, waitPids = [], dependencies = defaultDependencies) {
8
+ validatePlan(plan);
9
+ assertUpdateLock(plan);
10
+ markUpdateRunning(plan);
11
+ fs.mkdirSync(path.dirname(plan.logPath), { recursive: true });
12
+ const log = (event, data = {}) => {
13
+ fs.appendFileSync(plan.logPath, `${JSON.stringify({
14
+ timestamp: dependencies.now().toISOString(),
15
+ event,
16
+ ...data,
17
+ })}\n`);
18
+ };
19
+ try {
20
+ log("update_started", {
21
+ fromVersion: plan.fromVersion,
22
+ toVersion: plan.toVersion,
23
+ waitPids,
24
+ });
25
+ try {
26
+ await dependencies.waitForProcesses(waitPids, 60_000);
27
+ }
28
+ catch (error) {
29
+ return recoverBeforeInstallation(plan, errorMessage(error), dependencies, log);
30
+ }
31
+ let databaseBackup;
32
+ try {
33
+ databaseBackup = createDatabaseBackup(plan);
34
+ log("database_backup_created", {
35
+ directory: databaseBackup.directory,
36
+ files: databaseBackup.entries.filter((entry) => entry.existed).length,
37
+ });
38
+ }
39
+ catch (error) {
40
+ return recoverBeforeInstallation(plan, `Could not back up Agent Bot state: ${errorMessage(error)}`, dependencies, log);
41
+ }
42
+ let startedSupervisorPid;
43
+ try {
44
+ installTarball(plan.candidateTarball, plan.workingDirectory, dependencies, log);
45
+ dependencies.validatePackage(plan.packageRoot, plan.packageName, plan.toVersion);
46
+ initializeUpdatedProfile(plan, dependencies, log);
47
+ if (plan.restartService) {
48
+ startedSupervisorPid = dependencies.startSupervisor(plan.packageRoot, plan.workingDirectory);
49
+ if (!(await dependencies.waitForServer(plan.controlEndpoint, 60_000))) {
50
+ throw new Error("The updated Agent Bot service did not become ready within 60 seconds.");
51
+ }
52
+ }
53
+ const result = {
54
+ status: "updated",
55
+ fromVersion: plan.fromVersion,
56
+ toVersion: plan.toVersion,
57
+ activeVersion: plan.toVersion,
58
+ initialized: true,
59
+ ...(plan.restartService ? { serviceReady: true } : {}),
60
+ completedAt: dependencies.now().toISOString(),
61
+ };
62
+ writeResult(plan.resultPath, result);
63
+ log("update_completed", { ...result });
64
+ return result;
65
+ }
66
+ catch (error) {
67
+ const message = errorMessage(error);
68
+ log("update_failed", { error: message });
69
+ if (plan.restartService) {
70
+ await dependencies
71
+ .stopServer(plan.controlEndpoint, startedSupervisorPid)
72
+ .catch((stopError) => {
73
+ log("updated_service_stop_failed", {
74
+ error: errorMessage(stopError),
75
+ });
76
+ });
77
+ }
78
+ return rollback(plan, message, databaseBackup, dependencies, log);
79
+ }
80
+ }
81
+ finally {
82
+ releaseUpdateLock(plan);
83
+ }
84
+ }
85
+ async function recoverBeforeInstallation(plan, waitError, dependencies, log) {
86
+ log("update_aborted_before_install", { error: waitError });
87
+ if (plan.restartService) {
88
+ let ready = await dependencies.waitForServer(plan.controlEndpoint, 2_000);
89
+ if (!ready) {
90
+ process.env.AGENT_BOT_RESTART_REASON = `Agent Bot update aborted; running backup ${plan.fromVersion}`;
91
+ dependencies.validatePackage(plan.backupPackageRoot, plan.packageName, plan.fromVersion);
92
+ dependencies.startSupervisor(plan.backupPackageRoot, plan.workingDirectory);
93
+ ready = await dependencies.waitForServer(plan.controlEndpoint, 60_000);
94
+ }
95
+ if (ready) {
96
+ const result = {
97
+ status: "rolled-back",
98
+ fromVersion: plan.fromVersion,
99
+ toVersion: plan.toVersion,
100
+ activeVersion: plan.fromVersion,
101
+ serviceReady: true,
102
+ fallback: "backup",
103
+ error: waitError,
104
+ completedAt: dependencies.now().toISOString(),
105
+ };
106
+ writeResult(plan.resultPath, result);
107
+ log("preinstall_recovery_completed", { ...result });
108
+ return result;
109
+ }
110
+ }
111
+ const result = {
112
+ status: "failed",
113
+ fromVersion: plan.fromVersion,
114
+ toVersion: plan.toVersion,
115
+ error: waitError,
116
+ completedAt: dependencies.now().toISOString(),
117
+ };
118
+ writeResult(plan.resultPath, result);
119
+ log("preinstall_recovery_failed", { ...result });
120
+ return result;
121
+ }
122
+ async function rollback(plan, updateError, databaseBackup, dependencies, log) {
123
+ let rollbackError;
124
+ try {
125
+ installTarball(plan.backupTarball, plan.workingDirectory, dependencies, log);
126
+ dependencies.validatePackage(plan.packageRoot, plan.packageName, plan.fromVersion);
127
+ restoreDatabase(databaseBackup);
128
+ if (plan.restartService) {
129
+ process.env.AGENT_BOT_RESTART_REASON = `Agent Bot update failed; restored ${plan.fromVersion}`;
130
+ dependencies.startSupervisor(plan.packageRoot, plan.workingDirectory);
131
+ if (!(await dependencies.waitForServer(plan.controlEndpoint, 60_000))) {
132
+ throw new Error("The restored Agent Bot service did not become ready within 60 seconds.");
133
+ }
134
+ }
135
+ const result = {
136
+ status: "rolled-back",
137
+ fromVersion: plan.fromVersion,
138
+ toVersion: plan.toVersion,
139
+ activeVersion: plan.fromVersion,
140
+ ...(plan.restartService ? { serviceReady: true } : {}),
141
+ fallback: "npm",
142
+ error: updateError,
143
+ completedAt: dependencies.now().toISOString(),
144
+ };
145
+ writeResult(plan.resultPath, result);
146
+ log("rollback_completed", { ...result });
147
+ return result;
148
+ }
149
+ catch (error) {
150
+ rollbackError = errorMessage(error);
151
+ log("npm_rollback_failed", { error: rollbackError });
152
+ }
153
+ if (plan.restartService) {
154
+ try {
155
+ dependencies.validatePackage(plan.backupPackageRoot, plan.packageName, plan.fromVersion);
156
+ restoreDatabase(databaseBackup);
157
+ process.env.AGENT_BOT_RESTART_REASON = `Agent Bot update failed; running backup ${plan.fromVersion}`;
158
+ dependencies.startSupervisor(plan.backupPackageRoot, plan.workingDirectory);
159
+ if (!(await dependencies.waitForServer(plan.controlEndpoint, 60_000))) {
160
+ throw new Error("The backup Agent Bot service did not become ready within 60 seconds.");
161
+ }
162
+ const result = {
163
+ status: "rolled-back",
164
+ fromVersion: plan.fromVersion,
165
+ toVersion: plan.toVersion,
166
+ activeVersion: plan.fromVersion,
167
+ serviceReady: true,
168
+ fallback: "backup",
169
+ error: updateError,
170
+ rollbackError,
171
+ completedAt: dependencies.now().toISOString(),
172
+ };
173
+ writeResult(plan.resultPath, result);
174
+ log("backup_service_started", { ...result });
175
+ return result;
176
+ }
177
+ catch (error) {
178
+ rollbackError = `${rollbackError ?? "npm rollback failed"}; backup start failed: ${errorMessage(error)}`;
179
+ }
180
+ }
181
+ const result = {
182
+ status: "failed",
183
+ fromVersion: plan.fromVersion,
184
+ toVersion: plan.toVersion,
185
+ error: updateError,
186
+ rollbackError,
187
+ completedAt: dependencies.now().toISOString(),
188
+ };
189
+ writeResult(plan.resultPath, result);
190
+ log("rollback_failed", { ...result });
191
+ return result;
192
+ }
193
+ function installTarball(tarball, cwd, dependencies, log) {
194
+ const result = dependencies.runNpm(["install", "--global", "--no-audit", "--no-fund", tarball], cwd);
195
+ log("npm_install_finished", {
196
+ tarball,
197
+ status: result.status,
198
+ stderr: result.stderr.trim().slice(-4_000),
199
+ });
200
+ if (result.error)
201
+ throw result.error;
202
+ if (result.status !== 0) {
203
+ throw new Error(result.stderr.trim() ||
204
+ result.stdout.trim() ||
205
+ `npm exited with ${result.status}.`);
206
+ }
207
+ }
208
+ function initializeUpdatedProfile(plan, dependencies, log) {
209
+ const result = dependencies.initializeProfile(plan.packageRoot, plan.workingDirectory);
210
+ log("profile_initialization_finished", {
211
+ status: result.status,
212
+ stderr: result.stderr.trim().slice(-4_000),
213
+ });
214
+ if (result.error)
215
+ throw result.error;
216
+ if (result.status !== 0) {
217
+ throw new Error(result.stderr.trim()
218
+ || result.stdout.trim()
219
+ || `agentbot init exited with ${result.status}.`);
220
+ }
221
+ }
222
+ export function validateInstalledPackage(packageRoot, packageName, version) {
223
+ const metadata = JSON.parse(fs.readFileSync(path.join(packageRoot, "package.json"), "utf8"));
224
+ if (metadata.name !== packageName || metadata.version !== version) {
225
+ throw new Error(`Installed package identity mismatch: expected ${packageName}@${version}, got ${String(metadata.name)}@${String(metadata.version)}.`);
226
+ }
227
+ const cliEntry = path.join(packageRoot, "dist", "cli.js");
228
+ const supervisorEntry = path.join(packageRoot, "dist", "supervisor.js");
229
+ for (const required of [cliEntry, supervisorEntry]) {
230
+ if (!fs.existsSync(required))
231
+ throw new Error(`Updated package is missing ${required}.`);
232
+ }
233
+ const versionResult = runNode([cliEntry, "--version"], packageRoot);
234
+ if (versionResult.status !== 0 || versionResult.stdout.trim() !== version) {
235
+ throw new Error(`Updated CLI validation failed: ${versionResult.stderr.trim() || versionResult.stdout.trim()}.`);
236
+ }
237
+ const helpResult = runNode([cliEntry, "--help"], packageRoot);
238
+ if (helpResult.status !== 0 || !helpResult.stdout.includes("agentbot")) {
239
+ throw new Error(`Updated CLI help validation failed: ${helpResult.stderr.trim() || helpResult.stdout.trim()}.`);
240
+ }
241
+ }
242
+ function startSupervisor(packageRoot, cwd) {
243
+ const child = spawn(process.execPath, [path.join(packageRoot, "dist", "supervisor.js")], {
244
+ cwd,
245
+ detached: true,
246
+ windowsHide: true,
247
+ stdio: "ignore",
248
+ env: process.env,
249
+ });
250
+ child.unref();
251
+ return child.pid;
252
+ }
253
+ function initializeProfile(packageRoot, cwd) {
254
+ return runNode([
255
+ path.join(packageRoot, "dist", "cli.js"),
256
+ "init",
257
+ "--skip-feishu",
258
+ "--json",
259
+ ], cwd);
260
+ }
261
+ async function waitForServer(endpoint, timeoutMs) {
262
+ const deadline = Date.now() + timeoutMs;
263
+ while (Date.now() < deadline) {
264
+ const response = await sendControlRequest(endpoint, { action: "health" }, 1_000).catch(() => undefined);
265
+ if (response?.ok &&
266
+ isRecord(response.data) &&
267
+ response.data.ready !== false)
268
+ return true;
269
+ await delay(500);
270
+ }
271
+ return false;
272
+ }
273
+ async function stopServer(endpoint, supervisorPid) {
274
+ await sendControlRequest(endpoint, { action: "server_stop" }, 2_000).catch(() => undefined);
275
+ const deadline = Date.now() + 10_000;
276
+ while (Date.now() < deadline) {
277
+ if (!(await endpointReachable(endpoint)))
278
+ break;
279
+ await delay(250);
280
+ }
281
+ if (supervisorPid) {
282
+ try {
283
+ process.kill(supervisorPid, "SIGTERM");
284
+ }
285
+ catch {
286
+ // The Supervisor may already have exited.
287
+ }
288
+ }
289
+ if (supervisorPid) {
290
+ const processDeadline = Date.now() + 5_000;
291
+ while (processExists(supervisorPid) && Date.now() < processDeadline)
292
+ await delay(250);
293
+ }
294
+ }
295
+ async function waitForProcesses(pids, timeoutMs) {
296
+ const remaining = new Set(pids.filter((pid) => Number.isInteger(pid) && pid > 0));
297
+ const deadline = Date.now() + timeoutMs;
298
+ while (remaining.size > 0 && Date.now() < deadline) {
299
+ for (const pid of remaining) {
300
+ if (!processExists(pid))
301
+ remaining.delete(pid);
302
+ }
303
+ if (remaining.size > 0)
304
+ await delay(250);
305
+ }
306
+ if (remaining.size > 0) {
307
+ throw new Error(`Timed out waiting for Agent Bot processes to exit: ${[...remaining].join(", ")}.`);
308
+ }
309
+ }
310
+ function processExists(pid) {
311
+ try {
312
+ process.kill(pid, 0);
313
+ return true;
314
+ }
315
+ catch (error) {
316
+ return isRecord(error) && error.code === "EPERM";
317
+ }
318
+ }
319
+ function sendControlRequest(endpoint, request, timeoutMs) {
320
+ return new Promise((resolve, reject) => {
321
+ const socket = net.createConnection(endpoint);
322
+ let settled = false;
323
+ let input = "";
324
+ const finish = (operation) => {
325
+ if (settled)
326
+ return;
327
+ settled = true;
328
+ clearTimeout(timer);
329
+ socket.destroy();
330
+ operation();
331
+ };
332
+ const timer = setTimeout(() => finish(() => reject(new Error("Control request timed out."))), timeoutMs);
333
+ socket.setEncoding("utf8");
334
+ socket.once("connect", () => socket.write(`${JSON.stringify(request)}\n`));
335
+ socket.on("data", (chunk) => {
336
+ input += chunk;
337
+ const newline = input.indexOf("\n");
338
+ if (newline < 0)
339
+ return;
340
+ try {
341
+ finish(() => resolve(JSON.parse(input.slice(0, newline))));
342
+ }
343
+ catch (error) {
344
+ finish(() => reject(error));
345
+ }
346
+ });
347
+ socket.once("error", (error) => finish(() => reject(error)));
348
+ socket.once("end", () => finish(() => reject(new Error("Control endpoint returned no response."))));
349
+ });
350
+ }
351
+ function endpointReachable(endpoint) {
352
+ return sendControlRequest(endpoint, { action: "health" }, 500).then(() => true, () => false);
353
+ }
354
+ export function runNpmCommand(args, cwd) {
355
+ const npmCli = resolveNpmCli();
356
+ if (npmCli)
357
+ return runNode([npmCli, ...args], cwd);
358
+ const result = spawnSync(process.platform === "win32" ? "npm.cmd" : "npm", args, {
359
+ cwd,
360
+ env: process.env,
361
+ encoding: "utf8",
362
+ maxBuffer: 32 * 1024 * 1024,
363
+ shell: process.platform === "win32",
364
+ });
365
+ return commandResult(result);
366
+ }
367
+ function resolveNpmCli() {
368
+ const candidates = [
369
+ process.env.npm_execpath,
370
+ path.join(path.dirname(process.execPath), "node_modules", "npm", "bin", "npm-cli.js"),
371
+ process.env.APPDATA
372
+ ? path.join(process.env.APPDATA, "npm", "node_modules", "npm", "bin", "npm-cli.js")
373
+ : undefined,
374
+ ];
375
+ return candidates.find((candidate) => Boolean(candidate && fs.existsSync(candidate)));
376
+ }
377
+ function runNode(args, cwd) {
378
+ return commandResult(spawnSync(process.execPath, args, {
379
+ cwd,
380
+ env: process.env,
381
+ encoding: "utf8",
382
+ maxBuffer: 32 * 1024 * 1024,
383
+ }));
384
+ }
385
+ function commandResult(result) {
386
+ return {
387
+ status: result.status ?? (result.error ? 1 : 0),
388
+ stdout: typeof result.stdout === "string"
389
+ ? result.stdout
390
+ : (result.stdout?.toString("utf8") ?? ""),
391
+ stderr: typeof result.stderr === "string"
392
+ ? result.stderr
393
+ : (result.stderr?.toString("utf8") ?? ""),
394
+ ...(result.error ? { error: result.error } : {}),
395
+ };
396
+ }
397
+ function validatePlan(plan) {
398
+ if (plan.schemaVersion !== SELF_UPDATE_PLAN_VERSION)
399
+ throw new Error("Unsupported Agent Bot update plan.");
400
+ for (const value of [
401
+ plan.packageName,
402
+ plan.fromVersion,
403
+ plan.toVersion,
404
+ plan.packageRoot,
405
+ plan.candidateTarball,
406
+ plan.backupTarball,
407
+ plan.backupPackageRoot,
408
+ plan.lockPath,
409
+ plan.lockToken,
410
+ plan.pendingMarkerPath,
411
+ plan.databasePath,
412
+ plan.controlEndpoint,
413
+ plan.workingDirectory,
414
+ plan.resultPath,
415
+ plan.logPath,
416
+ ]) {
417
+ if (!value?.trim())
418
+ throw new Error("Agent Bot update plan is incomplete.");
419
+ }
420
+ }
421
+ function createDatabaseBackup(plan) {
422
+ const directory = path.join(path.dirname(plan.resultPath), "database-backup");
423
+ fs.mkdirSync(directory, { recursive: true });
424
+ const sourcePaths = [
425
+ plan.databasePath,
426
+ `${plan.databasePath}-wal`,
427
+ `${plan.databasePath}-shm`,
428
+ ];
429
+ const entries = sourcePaths.map((sourcePath, index) => {
430
+ const existed = fs.existsSync(sourcePath);
431
+ const backupPath = path.join(directory, `${index}-${path.basename(sourcePath)}`);
432
+ if (existed)
433
+ fs.copyFileSync(sourcePath, backupPath);
434
+ return { sourcePath, backupPath, existed };
435
+ });
436
+ fs.writeFileSync(path.join(directory, "manifest.json"), `${JSON.stringify({ entries }, null, 2)}\n`);
437
+ return { directory, entries };
438
+ }
439
+ function restoreDatabase(backup) {
440
+ for (const entry of backup.entries) {
441
+ fs.rmSync(entry.sourcePath, { force: true });
442
+ if (!entry.existed)
443
+ continue;
444
+ fs.mkdirSync(path.dirname(entry.sourcePath), { recursive: true });
445
+ fs.copyFileSync(entry.backupPath, entry.sourcePath);
446
+ }
447
+ }
448
+ function assertUpdateLock(plan) {
449
+ const lock = JSON.parse(fs.readFileSync(plan.lockPath, "utf8"));
450
+ if (lock.token !== plan.lockToken)
451
+ throw new Error("Agent Bot update lock is not owned by this operation.");
452
+ }
453
+ function releaseUpdateLock(plan) {
454
+ try {
455
+ const lock = JSON.parse(fs.readFileSync(plan.lockPath, "utf8"));
456
+ if (lock.token === plan.lockToken)
457
+ fs.rmSync(plan.lockPath, { force: true });
458
+ }
459
+ catch {
460
+ // A missing or replaced lock belongs to no recoverable update operation.
461
+ }
462
+ try {
463
+ const marker = JSON.parse(fs.readFileSync(plan.pendingMarkerPath, "utf8"));
464
+ if (marker.token === plan.lockToken)
465
+ fs.rmSync(plan.pendingMarkerPath, { force: true });
466
+ }
467
+ catch {
468
+ // A missing or replaced marker belongs to no recoverable update operation.
469
+ }
470
+ }
471
+ function markUpdateRunning(plan) {
472
+ fs.writeFileSync(plan.pendingMarkerPath, `${JSON.stringify({
473
+ token: plan.lockToken,
474
+ phase: "running",
475
+ planPath: path.join(path.dirname(plan.resultPath), "plan.json"),
476
+ runnerPid: process.pid,
477
+ startedAt: new Date().toISOString(),
478
+ }, null, 2)}\n`);
479
+ }
480
+ function writeResult(resultPath, result) {
481
+ fs.writeFileSync(resultPath, `${JSON.stringify(result, null, 2)}\n`);
482
+ }
483
+ function readPlan(planPath) {
484
+ return JSON.parse(fs.readFileSync(planPath, "utf8"));
485
+ }
486
+ function writeFatalResult(plan, error) {
487
+ if (!plan)
488
+ return;
489
+ const result = {
490
+ status: "failed",
491
+ fromVersion: plan.fromVersion,
492
+ toVersion: plan.toVersion,
493
+ error: errorMessage(error),
494
+ completedAt: new Date().toISOString(),
495
+ };
496
+ try {
497
+ writeResult(plan.resultPath, result);
498
+ }
499
+ catch {
500
+ // There is no further recovery path if even the result file cannot be written.
501
+ }
502
+ }
503
+ function parseWaitPids(args) {
504
+ const pids = [];
505
+ for (let index = 0; index < args.length; index += 1) {
506
+ if (args[index] !== "--wait-pid")
507
+ continue;
508
+ const pid = Number(args[index + 1]);
509
+ if (Number.isInteger(pid) && pid > 0)
510
+ pids.push(pid);
511
+ index += 1;
512
+ }
513
+ return pids;
514
+ }
515
+ function isRecord(value) {
516
+ return Boolean(value) && typeof value === "object";
517
+ }
518
+ function errorMessage(error) {
519
+ return error instanceof Error ? error.message : String(error);
520
+ }
521
+ function delay(ms) {
522
+ return new Promise((resolve) => setTimeout(resolve, ms));
523
+ }
524
+ const defaultDependencies = {
525
+ runNpm: runNpmCommand,
526
+ validatePackage: validateInstalledPackage,
527
+ initializeProfile,
528
+ startSupervisor,
529
+ waitForServer,
530
+ stopServer,
531
+ waitForProcesses,
532
+ now: () => new Date(),
533
+ };
534
+ const invokedDirectly = process.argv[1] &&
535
+ path.resolve(process.argv[1]) ===
536
+ path.resolve(fileURLToPath(import.meta.url));
537
+ if (invokedDirectly) {
538
+ const planPath = process.argv[2];
539
+ let plan;
540
+ void (async () => {
541
+ if (!planPath)
542
+ throw new Error("Missing Agent Bot update plan path.");
543
+ plan = readPlan(planPath);
544
+ const result = await applySelfUpdatePlan(plan, parseWaitPids(process.argv.slice(3)));
545
+ if (result.status === "failed")
546
+ process.exitCode = 1;
547
+ })().catch((error) => {
548
+ writeFatalResult(plan, error);
549
+ process.exitCode = 1;
550
+ });
551
+ }
552
+ //# sourceMappingURL=SelfUpdateRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelfUpdateRunner.js","sourceRoot":"","sources":["../../src/cli/SelfUpdateRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAgE1C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAoB,EACpB,QAAQ,GAAa,EAAE,EACvB,YAAY,GAAiC,mBAAmB;IAEhE,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,IAAI,GAA4B,EAAE,EAAQ,EAAE;QACtE,EAAE,CAAC,cAAc,CACf,IAAI,CAAC,OAAO,EACZ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChB,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;YAC3C,KAAK;YACL,GAAG,IAAI;SACR,CAAC,IAAI,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,GAAG,CAAC,gBAAgB,EAAE;YACpB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ;SACT,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,yBAAyB,CAC9B,IAAI,EACJ,YAAY,CAAC,KAAK,CAAC,EACnB,YAAY,EACZ,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,cAA8B,CAAC;QACnC,IAAI,CAAC;YACH,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC5C,GAAG,CAAC,yBAAyB,EAAE;gBAC7B,SAAS,EAAE,cAAc,CAAC,SAAS;gBACnC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;aACtE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,yBAAyB,CAC9B,IAAI,EACJ,sCAAsC,YAAY,CAAC,KAAK,CAAC,EAAE,EAC3D,YAAY,EACZ,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,oBAAwC,CAAC;QAC7C,IAAI,CAAC;YACH,cAAc,CACZ,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,YAAY,EACZ,GAAG,CACJ,CAAC;YACF,YAAY,CAAC,eAAe,CAC1B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,CACf,CAAC;YACF,wBAAwB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,oBAAoB,GAAG,YAAY,CAAC,eAAe,CACjD,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,gBAAgB,CACtB,CAAC;gBACF,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;oBACtE,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAqB;gBAC/B,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,aAAa,EAAE,IAAI,CAAC,SAAS;gBAC7B,WAAW,EAAE,IAAI;gBACjB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,WAAW,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;aAC9C,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACrC,GAAG,CAAC,kBAAkB,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACpC,GAAG,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,YAAY;qBACf,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC;qBACtD,KAAK,CAAC,CAAC,SAAkB,EAAE,EAAE;oBAC5B,GAAG,CAAC,6BAA6B,EAAE;wBACjC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC;qBAC/B,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,IAAoB,EACpB,SAAiB,EACjB,YAA0C,EAC1C,GAA4D;IAE5D,GAAG,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,4CAA4C,IAAI,CAAC,WAAW,EAAE,CAAC;YACtG,YAAY,CAAC,eAAe,CAC1B,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,CACjB,CAAC;YACF,YAAY,CAAC,eAAe,CAC1B,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,gBAAgB,CACtB,CAAC;YACF,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAqB;gBAC/B,MAAM,EAAE,aAAa;gBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,aAAa,EAAE,IAAI,CAAC,WAAW;gBAC/B,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;aAC9C,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACrC,GAAG,CAAC,+BAA+B,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAqB;QAC/B,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KAC9C,CAAC;IACF,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrC,GAAG,CAAC,4BAA4B,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,IAAoB,EACpB,WAAmB,EACnB,cAA8B,EAC9B,YAA0C,EAC1C,GAA4D;IAE5D,IAAI,aAAiC,CAAC;IACtC,IAAI,CAAC;QACH,cAAc,CACZ,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,gBAAgB,EACrB,YAAY,EACZ,GAAG,CACJ,CAAC;QACF,YAAY,CAAC,eAAe,CAC1B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,eAAe,CAAC,cAAc,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,qCAAqC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/F,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACtE,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAqB;YAC/B,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,WAAW;YAC/B,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;SAC9C,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrC,GAAG,CAAC,oBAAoB,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACpC,GAAG,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,YAAY,CAAC,eAAe,CAC1B,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,CACjB,CAAC;YACF,eAAe,CAAC,cAAc,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,2CAA2C,IAAI,CAAC,WAAW,EAAE,CAAC;YACrG,YAAY,CAAC,eAAe,CAC1B,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,gBAAgB,CACtB,CAAC;YACF,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAqB;gBAC/B,MAAM,EAAE,aAAa;gBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,aAAa,EAAE,IAAI,CAAC,WAAW;gBAC/B,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,WAAW;gBAClB,aAAa;gBACb,WAAW,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;aAC9C,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACrC,GAAG,CAAC,wBAAwB,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YAC7C,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,GAAG,GAAG,aAAa,IAAI,qBAAqB,0BAA0B,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3G,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAqB;QAC/B,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,WAAW;QAClB,aAAa;QACb,WAAW,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KAC9C,CAAC;IACF,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrC,GAAG,CAAC,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CACrB,OAAe,EACf,GAAW,EACX,YAA0C,EAC1C,GAA4D;IAE5D,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAChC,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,EAC3D,GAAG,CACJ,CAAC;IACF,GAAG,CAAC,sBAAsB,EAAE;QAC1B,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;KAC3C,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,MAAM,CAAC,KAAK,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YACpB,mBAAmB,MAAM,CAAC,MAAM,GAAG,CACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAoB,EACpB,YAA0C,EAC1C,GAA4D;IAE5D,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvF,GAAG,CAAC,iCAAiC,EAAE;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;KAC3C,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,MAAM,CAAC,KAAK,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;eACf,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;eACpB,6BAA6B,MAAM,CAAC,MAAM,GAAG,CACnD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,WAAmB,EACnB,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAIhE,CAAC;IACF,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CACb,iDAAiD,WAAW,IAAI,OAAO,SAAS,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CACrI,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACxE,KAAK,MAAM,QAAQ,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;IACpE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CACb,kCAAkC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAChG,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,uCAAuC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAC/F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB,EAAE,GAAW;IACvD,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,CAAC,QAAQ,EAChB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,EACjD;QACE,GAAG;QACH,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CACF,CAAC;IACF,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAmB,EAAE,GAAW;IACzD,OAAO,OAAO,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC;QACxC,MAAM;QACN,eAAe;QACf,QAAQ;KACT,EAAE,GAAG,CAAC,CAAC;AACV,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,QAAgB,EAChB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC,QAAQ,EACR,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpB,KAAK,CACN,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzB,IACE,QAAQ,EAAE,EAAE;YACZ,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK;YAE7B,OAAO,IAAI,CAAC;QACd,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,QAAgB,EAChB,aAAsB;IAEtB,MAAM,kBAAkB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC,KAAK,CACxE,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;IACrC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAAE,MAAM;QAChD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC3C,OAAO,aAAa,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe;YACjE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,IAAc,EACd,SAAiB;IAEjB,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CACvD,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;gBAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,sDAAsD,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAgB,EAChB,OAAgC,EAChC,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,CAAC,SAAqB,EAAQ,EAAE;YAC7C,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;QACd,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC,EACnE,SAAS,CACV,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAClC,KAAK,IAAI,KAAK,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,GAAG,CAAC;gBAAE,OAAO;YACxB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,EAAE,CACV,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAGjC,CACF,CACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CACtB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC,CAC1E,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,kBAAkB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CACjE,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,GAAW;IACvD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,SAAS,CACtB,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAChD,IAAI,EACJ;QACE,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;QAC3B,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CACF,CAAC;IACF,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,GAAG,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC9B,cAAc,EACd,KAAK,EACL,KAAK,EACL,YAAY,CACb;QACD,OAAO,CAAC,GAAG,CAAC,OAAO;YACjB,CAAC,CAAC,IAAI,CAAC,IAAI,CACP,OAAO,CAAC,GAAG,CAAC,OAAO,EACnB,KAAK,EACL,cAAc,EACd,KAAK,EACL,KAAK,EACL,YAAY,CACb;YACH,CAAC,CAAC,SAAS;KACd,CAAC;IACF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAuB,EAAE,CACxD,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAC/C,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,IAAc,EAAE,GAAW;IAC1C,OAAO,aAAa,CAClB,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;QAChC,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC5B,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAoC;IACzD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,EACJ,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAC/B,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,EACJ,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAC/B,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAoB;IACxC,IAAI,IAAI,CAAC,aAAa,KAAK,wBAAwB;QACjD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI;QAClB,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,gBAAgB;QACrB,IAAI,CAAC,aAAa;QAClB,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,eAAe;QACpB,IAAI,CAAC,gBAAgB;QACrB,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,OAAO;KACb,EAAE,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAoB;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC9E,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,YAAY;QACjB,GAAG,IAAI,CAAC,YAAY,MAAM;QAC1B,GAAG,IAAI,CAAC,YAAY,MAAM;KAC3B,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,SAAS,EACT,GAAG,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CACxC,CAAC;QACF,IAAI,OAAO;YAAE,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EACrC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC5C,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,MAAsB;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,SAAS;QAC7B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAoB;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAE7D,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS;QAC/B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAoB;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAE7D,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS;YAC/B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CACzB,CAAC;QACzB,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS;YACjC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAoB;IAC7C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,iBAAiB,EACtB,GAAG,IAAI,CAAC,SAAS,CACf;QACE,KAAK,EAAE,IAAI,CAAC,SAAS;QACrB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;QAC/D,SAAS,EAAE,OAAO,CAAC,GAAG;QACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,MAAwB;IAC/D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAmB,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAgC,EAChC,KAAc;IAEd,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,MAAM,GAAqB;QAC/B,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;QAC1B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IACF,IAAI,CAAC;QACH,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,+EAA+E;IACjF,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,YAAY;YAAE,SAAS;QAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,mBAAmB,GAAiC;IACxD,MAAM,EAAE,aAAa;IACrB,eAAe,EAAE,wBAAwB;IACzC,iBAAiB;IACjB,eAAe;IACf,aAAa;IACb,UAAU;IACV,gBAAgB;IAChB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;CACtB,CAAC;AAEF,MAAM,eAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,IAAI,eAAe,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,IAAgC,CAAC;IACrC,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACtE,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,IAAI,EACJ,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrC,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC5B,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}