happy2 0.0.11 → 0.0.12

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 (133) hide show
  1. package/README.md +10 -0
  2. package/package.json +1 -1
  3. package/packages/happy2-server/PLUGINS.md +106 -34
  4. package/packages/happy2-server/README.md +11 -0
  5. package/packages/happy2-server/dist/daemon.d.ts +39 -0
  6. package/packages/happy2-server/dist/daemon.d.ts.map +1 -0
  7. package/packages/happy2-server/dist/daemon.js +302 -0
  8. package/packages/happy2-server/dist/daemon.js.map +1 -0
  9. package/packages/happy2-server/dist/daemon.test.d.ts +2 -0
  10. package/packages/happy2-server/dist/daemon.test.d.ts.map +1 -0
  11. package/packages/happy2-server/dist/daemon.test.js +245 -0
  12. package/packages/happy2-server/dist/daemon.test.js.map +1 -0
  13. package/packages/happy2-server/dist/index.d.ts +1 -1
  14. package/packages/happy2-server/dist/index.d.ts.map +1 -1
  15. package/packages/happy2-server/dist/index.js +1 -1
  16. package/packages/happy2-server/dist/index.js.map +1 -1
  17. package/packages/happy2-server/dist/modules/auth/tokens.d.ts +7 -0
  18. package/packages/happy2-server/dist/modules/auth/tokens.d.ts.map +1 -1
  19. package/packages/happy2-server/dist/modules/auth/tokens.js +33 -0
  20. package/packages/happy2-server/dist/modules/auth/tokens.js.map +1 -1
  21. package/packages/happy2-server/dist/modules/auth/tokens.test.d.ts +2 -0
  22. package/packages/happy2-server/dist/modules/auth/tokens.test.d.ts.map +1 -0
  23. package/packages/happy2-server/dist/modules/auth/tokens.test.js +28 -0
  24. package/packages/happy2-server/dist/modules/auth/tokens.test.js.map +1 -0
  25. package/packages/happy2-server/dist/modules/config/defaults.d.ts.map +1 -1
  26. package/packages/happy2-server/dist/modules/config/defaults.js +2 -0
  27. package/packages/happy2-server/dist/modules/config/defaults.js.map +1 -1
  28. package/packages/happy2-server/dist/modules/config/loader.d.ts.map +1 -1
  29. package/packages/happy2-server/dist/modules/config/loader.js +5 -0
  30. package/packages/happy2-server/dist/modules/config/loader.js.map +1 -1
  31. package/packages/happy2-server/dist/modules/config/loader.test.js +15 -0
  32. package/packages/happy2-server/dist/modules/config/loader.test.js.map +1 -1
  33. package/packages/happy2-server/dist/modules/config/type.d.ts +2 -0
  34. package/packages/happy2-server/dist/modules/config/type.d.ts.map +1 -1
  35. package/packages/happy2-server/dist/modules/plugin/catalog.d.ts.map +1 -1
  36. package/packages/happy2-server/dist/modules/plugin/catalog.js +45 -4
  37. package/packages/happy2-server/dist/modules/plugin/catalog.js.map +1 -1
  38. package/packages/happy2-server/dist/modules/plugin/catalog.test.js +33 -0
  39. package/packages/happy2-server/dist/modules/plugin/catalog.test.js.map +1 -1
  40. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.d.ts.map +1 -1
  41. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.js +14 -1
  42. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.js.map +1 -1
  43. package/packages/happy2-server/dist/modules/plugin/impl/effectiveContainer.d.ts +3 -0
  44. package/packages/happy2-server/dist/modules/plugin/impl/effectiveContainer.d.ts.map +1 -0
  45. package/packages/happy2-server/dist/modules/plugin/impl/effectiveContainer.js +12 -0
  46. package/packages/happy2-server/dist/modules/plugin/impl/effectiveContainer.js.map +1 -0
  47. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.d.ts.map +1 -1
  48. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.js +11 -0
  49. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.js.map +1 -1
  50. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.d.ts.map +1 -1
  51. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.js +15 -1
  52. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.js.map +1 -1
  53. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceAuthorize.d.ts +10 -0
  54. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceAuthorize.d.ts.map +1 -0
  55. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceAuthorize.js +20 -0
  56. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceAuthorize.js.map +1 -0
  57. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceInvalidate.d.ts +12 -0
  58. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceInvalidate.d.ts.map +1 -0
  59. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceInvalidate.js +44 -0
  60. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceInvalidate.js.map +1 -0
  61. package/packages/happy2-server/dist/modules/plugin/pluginInstall.d.ts.map +1 -1
  62. package/packages/happy2-server/dist/modules/plugin/pluginInstall.js +10 -5
  63. package/packages/happy2-server/dist/modules/plugin/pluginInstall.js.map +1 -1
  64. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.d.ts.map +1 -1
  65. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.js +18 -7
  66. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.js.map +1 -1
  67. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListForHost.d.ts +14 -0
  68. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListForHost.d.ts.map +1 -0
  69. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListForHost.js +20 -0
  70. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListForHost.js.map +1 -0
  71. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.d.ts +1 -0
  72. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.d.ts.map +1 -1
  73. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.js +1 -0
  74. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.js.map +1 -1
  75. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsList.d.ts +11 -0
  76. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsList.d.ts.map +1 -0
  77. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsList.js +43 -0
  78. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsList.js.map +1 -0
  79. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsListReady.d.ts +15 -0
  80. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsListReady.d.ts.map +1 -0
  81. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsListReady.js +37 -0
  82. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsListReady.js.map +1 -0
  83. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsReplace.d.ts +16 -0
  84. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsReplace.d.ts.map +1 -0
  85. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsReplace.js +71 -0
  86. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsReplace.js.map +1 -0
  87. package/packages/happy2-server/dist/modules/plugin/runtime.d.ts +19 -0
  88. package/packages/happy2-server/dist/modules/plugin/runtime.d.ts.map +1 -1
  89. package/packages/happy2-server/dist/modules/plugin/runtime.js +87 -2
  90. package/packages/happy2-server/dist/modules/plugin/runtime.js.map +1 -1
  91. package/packages/happy2-server/dist/modules/plugin/service.d.ts +12 -4
  92. package/packages/happy2-server/dist/modules/plugin/service.d.ts.map +1 -1
  93. package/packages/happy2-server/dist/modules/plugin/service.js +216 -170
  94. package/packages/happy2-server/dist/modules/plugin/service.js.map +1 -1
  95. package/packages/happy2-server/dist/modules/plugin/types.d.ts +40 -3
  96. package/packages/happy2-server/dist/modules/plugin/types.d.ts.map +1 -1
  97. package/packages/happy2-server/dist/modules/plugin/types.js +1 -0
  98. package/packages/happy2-server/dist/modules/plugin/types.js.map +1 -1
  99. package/packages/happy2-server/dist/modules/sandbox/index.d.ts +1 -1
  100. package/packages/happy2-server/dist/modules/sandbox/index.d.ts.map +1 -1
  101. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.d.ts +8 -1
  102. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.d.ts.map +1 -1
  103. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.js +101 -1
  104. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.js.map +1 -1
  105. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.test.js +78 -2
  106. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.test.js.map +1 -1
  107. package/packages/happy2-server/dist/modules/sandbox/types.d.ts +16 -0
  108. package/packages/happy2-server/dist/modules/sandbox/types.d.ts.map +1 -1
  109. package/packages/happy2-server/dist/modules/schema.d.ts +394 -0
  110. package/packages/happy2-server/dist/modules/schema.d.ts.map +1 -1
  111. package/packages/happy2-server/dist/modules/schema.js +15 -0
  112. package/packages/happy2-server/dist/modules/schema.js.map +1 -1
  113. package/packages/happy2-server/dist/routes/pluginHost.d.ts +6 -0
  114. package/packages/happy2-server/dist/routes/pluginHost.d.ts.map +1 -0
  115. package/packages/happy2-server/dist/routes/pluginHost.js +37 -0
  116. package/packages/happy2-server/dist/routes/pluginHost.js.map +1 -0
  117. package/packages/happy2-server/dist/routes/plugins.d.ts.map +1 -1
  118. package/packages/happy2-server/dist/routes/plugins.js +12 -0
  119. package/packages/happy2-server/dist/routes/plugins.js.map +1 -1
  120. package/packages/happy2-server/dist/runner.js +20 -1
  121. package/packages/happy2-server/dist/runner.js.map +1 -1
  122. package/packages/happy2-server/dist/server.d.ts +2 -0
  123. package/packages/happy2-server/dist/server.d.ts.map +1 -1
  124. package/packages/happy2-server/dist/server.js +20 -1
  125. package/packages/happy2-server/dist/server.js.map +1 -1
  126. package/packages/happy2-server/dist/systemService.d.ts.map +1 -1
  127. package/packages/happy2-server/dist/systemService.js +16 -1
  128. package/packages/happy2-server/dist/systemService.js.map +1 -1
  129. package/packages/happy2-server/dist/systemService.test.js +15 -1
  130. package/packages/happy2-server/dist/systemService.test.js.map +1 -1
  131. package/packages/happy2-server/drizzle/0022_plugin_container_runtime_tools.sql +16 -0
  132. package/packages/happy2-server/drizzle/meta/_journal.json +7 -0
  133. package/packages/happy2-server/happy2.example.toml +8 -0
@@ -3,7 +3,6 @@ import { createId } from "@paralleldrive/cuid2";
3
3
  import { readFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
5
5
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
6
- import { LATEST_PROTOCOL_VERSION } from "@modelcontextprotocol/sdk/types.js";
7
6
  import { realtimeTopics } from "../realtime/index.js";
8
7
  import { pluginInstall } from "./pluginInstall.js";
9
8
  import { pluginFindBySource } from "./pluginFindBySource.js";
@@ -14,10 +13,14 @@ import { pluginInstallationListIds } from "./pluginInstallationListIds.js";
14
13
  import { pluginInstallationListReadyMcpIds } from "./pluginInstallationListReadyMcpIds.js";
15
14
  import { pluginInstallationUpdateStatus } from "./pluginInstallationUpdateStatus.js";
16
15
  import { pluginRemoveMissingBuiltins } from "./pluginRemoveMissingBuiltins.js";
16
+ import { pluginMcpToolsReplace } from "./pluginMcpToolsReplace.js";
17
+ import { pluginMcpToolsListReady } from "./pluginMcpToolsListReady.js";
18
+ import { pluginContainerInstanceAuthorize } from "./pluginContainerInstanceAuthorize.js";
19
+ import { pluginContainerInstanceInvalidate } from "./pluginContainerInstanceInvalidate.js";
17
20
  import { RemotePluginMcpTransport } from "./utils/remoteMcpTransport.js";
18
- import { PluginError, } from "./types.js";
21
+ import { PluginError, MAX_PLUGIN_MCP_TOOLS, } from "./types.js";
19
22
  const HEALTH_TIMEOUT_MS = 15_000;
20
- const FUNCTION_DISCOVERY_TIMEOUT_MS = 15_000;
23
+ const COMMAND_STARTUP_GRACE_MS = 250;
21
24
  const FUNCTION_EXECUTION_TIMEOUT_MS = 30_000;
22
25
  const MAX_RIG_PLUGIN_FUNCTIONS = 128;
23
26
  /** Coordinates durable plugin installs with asynchronous container preparation, MCP health probes, restart recovery, and local connection creation. */
@@ -28,21 +31,25 @@ export class PluginService {
28
31
  packages;
29
32
  secrets;
30
33
  runtime;
34
+ tokens;
31
35
  urlPolicy;
32
36
  remoteTransport;
37
+ hostApiUrl;
33
38
  onError;
34
39
  activations = new Map();
35
- localContainers = new Set();
40
+ commandHandles = new Map();
36
41
  closed = false;
37
- constructor(executor, pubsub, catalog, packages, secrets, runtime, urlPolicy, remoteTransport, onError) {
42
+ constructor(executor, pubsub, catalog, packages, secrets, runtime, tokens, urlPolicy, remoteTransport, hostApiUrl, onError) {
38
43
  this.executor = executor;
39
44
  this.pubsub = pubsub;
40
45
  this.catalog = catalog;
41
46
  this.packages = packages;
42
47
  this.secrets = secrets;
43
48
  this.runtime = runtime;
49
+ this.tokens = tokens;
44
50
  this.urlPolicy = urlPolicy;
45
51
  this.remoteTransport = remoteTransport;
52
+ this.hostApiUrl = hostApiUrl;
46
53
  this.onError = onError;
47
54
  }
48
55
  async start() {
@@ -104,67 +111,27 @@ export class PluginService {
104
111
  }
105
112
  async openLocal(installationId) {
106
113
  const configuration = await pluginInstallationGetRuntimeConfiguration(this.executor, this.secrets, installationId);
107
- if (configuration.type !== "stdio")
114
+ if (configuration.type !== "local" || !configuration.mcp)
108
115
  throw new PluginError("not_found", "Plugin does not expose a local stdio MCP server");
116
+ const environment = this.runtimeEnvironment(configuration, await this.pluginRuntimeToken(configuration));
109
117
  return this.runtime.openLocal({
110
118
  containerName: configuration.containerName,
111
- command: configuration.command,
112
- args: configuration.args,
113
- environment: configuration.environment,
119
+ command: configuration.mcp.command,
120
+ args: configuration.mcp.args,
121
+ environment,
114
122
  });
115
123
  }
116
124
  async listFunctions(signal) {
117
- return withOperationTimeout(FUNCTION_DISCOVERY_TIMEOUT_MS, "Plugin MCP function discovery", signal, (operationSignal) => this.listFunctionsWithSignal(operationSignal));
118
- }
119
- async listFunctionsWithSignal(signal) {
120
- const installationIds = await pluginInstallationListReadyMcpIds(this.executor);
121
- const functions = [];
122
- for (const installationId of installationIds) {
123
- try {
124
- const discovered = await this.withClient(installationId, signal, async (client, configuration) => {
125
- const definitions = [];
126
- const seenCursors = new Set();
127
- const remaining = MAX_RIG_PLUGIN_FUNCTIONS - functions.length;
128
- let pages = 0;
129
- let cursor;
130
- do {
131
- pages += 1;
132
- if (pages > MAX_RIG_PLUGIN_FUNCTIONS)
133
- throw new PluginFunctionCatalogError("Plugin MCP tool pagination exceeded the page limit");
134
- const page = await client.listTools(cursor === undefined ? undefined : { cursor });
135
- for (const tool of page.tools) {
136
- if (definitions.length >= remaining)
137
- throw new PluginFunctionCatalogError(`Installed plugins expose more than Rig's ${MAX_RIG_PLUGIN_FUNCTIONS}-function limit`);
138
- definitions.push({
139
- description: tool.description ??
140
- `Runs ${tool.name} from the ${configuration.shortName} plugin.`,
141
- label: `${configuration.shortName}: ${tool.title ?? tool.name}`,
142
- name: pluginFunctionName(installationId, tool.name),
143
- parameters: tool.inputSchema,
144
- });
145
- }
146
- if (page.nextCursor && seenCursors.has(page.nextCursor))
147
- throw new Error("Plugin MCP tool pagination repeated a cursor");
148
- if (page.nextCursor)
149
- seenCursors.add(page.nextCursor);
150
- cursor = page.nextCursor;
151
- } while (cursor !== undefined);
152
- return definitions;
153
- });
154
- if (discovered)
155
- functions.push(...discovered);
156
- }
157
- catch (error) {
158
- if (signal.aborted)
159
- throw error;
160
- if (error instanceof PluginFunctionCatalogError)
161
- throw error;
162
- this.onError(error);
163
- }
164
- }
165
- if (functions.length > MAX_RIG_PLUGIN_FUNCTIONS)
166
- throw new Error(`Installed plugins expose ${functions.length} MCP tools, exceeding Rig's ${MAX_RIG_PLUGIN_FUNCTIONS}-function limit`);
167
- return functions;
125
+ signal?.throwIfAborted();
126
+ const tools = await pluginMcpToolsListReady(this.executor);
127
+ if (tools.length > MAX_RIG_PLUGIN_FUNCTIONS)
128
+ throw new PluginFunctionCatalogError(`Installed plugins expose ${tools.length} MCP tools, exceeding Rig's ${MAX_RIG_PLUGIN_FUNCTIONS}-function limit`);
129
+ return tools.map((tool) => ({
130
+ description: tool.description ?? `Runs ${tool.name} from the ${tool.shortName} plugin.`,
131
+ label: `${tool.shortName}: ${tool.title ?? tool.name}`,
132
+ name: pluginFunctionName(tool.installationId, tool.name),
133
+ parameters: tool.inputSchema,
134
+ }));
168
135
  }
169
136
  async callFunction(functionName, args, signal) {
170
137
  try {
@@ -193,27 +160,13 @@ export class PluginService {
193
160
  const ready = await pluginInstallationListReadyMcpIds(this.executor);
194
161
  if (!ready.includes(installationId))
195
162
  throw new Error("The plugin installation is not ready");
196
- const result = await this.withClient(installationId, signal, async (client, configuration) => {
197
- const seenCursors = new Set();
198
- let pages = 0;
199
- let cursor;
200
- let toolName;
201
- do {
202
- pages += 1;
203
- if (pages > MAX_RIG_PLUGIN_FUNCTIONS)
204
- throw new Error("Plugin MCP tool pagination exceeded the page limit");
205
- const page = await client.listTools(cursor === undefined ? undefined : { cursor });
206
- toolName = page.tools.find((tool) => pluginFunctionName(installationId, tool.name) === functionName)?.name;
207
- if (page.nextCursor && seenCursors.has(page.nextCursor))
208
- throw new Error("Plugin MCP tool pagination repeated a cursor");
209
- if (page.nextCursor)
210
- seenCursors.add(page.nextCursor);
211
- cursor = page.nextCursor;
212
- } while (!toolName && cursor !== undefined);
213
- if (!toolName)
214
- throw new Error(`The ${configuration.shortName} plugin no longer exposes this function`);
163
+ const cached = (await pluginMcpToolsListReady(this.executor)).find((tool) => tool.installationId === installationId &&
164
+ pluginFunctionName(installationId, tool.name) === functionName);
165
+ if (!cached)
166
+ throw new Error("The plugin no longer exposes this cached function");
167
+ const result = await this.withClient(installationId, signal, async (client) => {
215
168
  const result = await client.callTool({
216
- name: toolName,
169
+ name: cached.name,
217
170
  arguments: jsonArguments(args),
218
171
  });
219
172
  if (result.isError)
@@ -231,13 +184,40 @@ export class PluginService {
231
184
  throw new Error("The plugin does not expose MCP tools");
232
185
  return result;
233
186
  }
187
+ async authorizeHost(token, permission) {
188
+ let claims;
189
+ try {
190
+ claims = await this.tokens.verifyPluginRuntimeToken(token);
191
+ }
192
+ catch {
193
+ throw new PluginError("forbidden", "Plugin runtime token is invalid");
194
+ }
195
+ if (!claims.permissions.includes(permission))
196
+ throw new PluginError("forbidden", `Plugin runtime lacks ${permission} permission`);
197
+ const authorized = await pluginContainerInstanceAuthorize(this.executor, claims.installationId, claims.containerInstanceId);
198
+ if (!authorized)
199
+ throw new PluginError("forbidden", "Plugin container incarnation is not authorized");
200
+ if (!this.runtime.isLocalRunning ||
201
+ !(await this.runtime.isLocalRunning(authorized.containerName, claims.installationId, claims.containerInstanceId))) {
202
+ const hint = await pluginContainerInstanceInvalidate(this.executor, {
203
+ installationId: claims.installationId,
204
+ containerInstanceId: claims.containerInstanceId,
205
+ detail: "Plugin container is missing or stopped.",
206
+ });
207
+ if (hint)
208
+ await this.publish(hint).catch(this.onError);
209
+ throw new PluginError("forbidden", "Plugin container incarnation is not running");
210
+ }
211
+ return claims.installationId;
212
+ }
234
213
  async close() {
235
214
  this.closed = true;
236
215
  for (const { controller } of this.activations.values())
237
216
  controller.abort();
238
217
  await Promise.allSettled([...this.activations.values()].map(({ promise }) => promise));
239
- await Promise.allSettled([...this.localContainers].map((containerName) => this.runtime.removeLocal(containerName)));
240
- this.localContainers.clear();
218
+ for (const handle of this.commandHandles.values())
219
+ handle.close();
220
+ this.commandHandles.clear();
241
221
  }
242
222
  activate(installationId) {
243
223
  if (this.closed || this.activations.has(installationId))
@@ -253,12 +233,17 @@ export class PluginService {
253
233
  const configuration = await pluginInstallationGetRuntimeConfiguration(this.executor, this.secrets, installationId);
254
234
  if (configuration.type === "skills_only")
255
235
  return undefined;
256
- const transport = configuration.type === "stdio"
236
+ if (configuration.type === "local" && !configuration.mcp)
237
+ return undefined;
238
+ const localToken = configuration.type === "local"
239
+ ? await this.pluginRuntimeToken(configuration)
240
+ : undefined;
241
+ const transport = configuration.type === "local"
257
242
  ? await this.runtime.openLocal({
258
243
  containerName: configuration.containerName,
259
- command: configuration.command,
260
- args: configuration.args,
261
- environment: configuration.environment,
244
+ command: configuration.mcp.command,
245
+ args: configuration.mcp.args,
246
+ environment: this.runtimeEnvironment(configuration, localToken),
262
247
  }, signal)
263
248
  : new RemotePluginMcpTransport({
264
249
  headers: configuration.headers,
@@ -280,6 +265,9 @@ export class PluginService {
280
265
  }
281
266
  async runActivation(installationId, signal) {
282
267
  let preparedContainerName;
268
+ let preparedContainerInstanceId;
269
+ let commandHandle;
270
+ this.closeCommand(installationId);
283
271
  try {
284
272
  signal.throwIfAborted();
285
273
  await this.status(installationId, "preparing", "Preparing the installed plugin runtime.");
@@ -291,8 +279,10 @@ export class PluginService {
291
279
  }
292
280
  if (configuration.type === "remote") {
293
281
  await this.status(installationId, "starting", "Checking the remote MCP server.");
294
- await this.probeRemote(configuration, signal);
295
- await this.status(installationId, "ready", "Remote MCP server is healthy.");
282
+ const tools = await this.probeRemote(configuration, signal);
283
+ const hint = await pluginMcpToolsReplace(this.executor, installationId, tools);
284
+ await this.publish(hint).catch(this.onError);
285
+ await this.status(installationId, "ready", "Remote MCP server and cached tools are ready.");
296
286
  return;
297
287
  }
298
288
  const dockerfile = configuration.bundledDockerfile
@@ -301,6 +291,8 @@ export class PluginService {
301
291
  const prepared = await this.runtime.prepareLocal({
302
292
  installationId,
303
293
  containerName: configuration.containerName,
294
+ containerInstanceId: createId(),
295
+ existingContainerInstanceId: configuration.containerInstanceId,
304
296
  imageTag: configuration.imageTag,
305
297
  ...(dockerfile
306
298
  ? {
@@ -313,95 +305,156 @@ export class PluginService {
313
305
  : {}),
314
306
  }, signal);
315
307
  preparedContainerName = configuration.containerName;
316
- this.localContainers.add(configuration.containerName);
317
- await this.status(installationId, "starting", "Starting and checking the containerized MCP server.", undefined, prepared.imageTag);
318
- await this.probeLocal(configuration, signal);
319
- await this.status(installationId, "ready", "Containerized MCP server is healthy.", undefined, prepared.imageTag);
308
+ preparedContainerInstanceId = prepared.containerInstanceId;
309
+ const token = await this.tokens.issuePluginRuntimeToken({
310
+ installationId,
311
+ containerInstanceId: prepared.containerInstanceId,
312
+ permissions: configuration.permissions,
313
+ });
314
+ const environment = this.runtimeEnvironment(configuration, token);
315
+ await this.status(installationId, "starting", "Starting and checking the containerized plugin runtime.", undefined, prepared.imageTag, prepared.containerInstanceId);
316
+ if (configuration.command) {
317
+ commandHandle = prepared.reused
318
+ ? await this.runtime.monitorLocalCommand(configuration.containerName, signal)
319
+ : await this.runtime.startLocalCommand({
320
+ containerName: configuration.containerName,
321
+ command: configuration.command.command,
322
+ args: configuration.command.args,
323
+ environment,
324
+ }, signal);
325
+ this.commandHandles.set(installationId, commandHandle);
326
+ await commandSurviveStartup(commandHandle.wait, signal);
327
+ }
328
+ if (configuration.mcp) {
329
+ const tools = await this.probeLocal(configuration, environment, signal);
330
+ const hint = await pluginMcpToolsReplace(this.executor, installationId, tools);
331
+ await this.publish(hint).catch(this.onError);
332
+ }
333
+ await this.status(installationId, "ready", configuration.mcp
334
+ ? "Containerized plugin runtime and MCP tools are ready."
335
+ : "Containerized plugin command is running.", undefined, prepared.imageTag, prepared.containerInstanceId);
336
+ if (commandHandle)
337
+ this.monitorCommand(installationId, configuration.containerName, commandHandle);
320
338
  }
321
339
  catch (error) {
322
- if (preparedContainerName) {
323
- this.localContainers.delete(preparedContainerName);
324
- await this.runtime.removeLocal(preparedContainerName).catch(this.onError);
340
+ if (commandHandle) {
341
+ if (this.commandHandles.get(installationId) === commandHandle)
342
+ this.commandHandles.delete(installationId);
343
+ commandHandle.close();
325
344
  }
326
345
  if (signal.aborted && this.closed)
327
346
  return;
347
+ if (preparedContainerName)
348
+ await this.runtime.removeLocal(preparedContainerName).catch(this.onError);
328
349
  const broken = error instanceof PluginError && error.code === "broken_configuration";
329
350
  await this.status(installationId, broken ? "broken_configuration" : "failed", broken
330
351
  ? "Plugin configuration must be corrected before it can start."
331
- : "Plugin runtime failed to prepare or start.", errorMessage(error)).catch(this.onError);
352
+ : "Plugin runtime failed to prepare or start.", errorMessage(error), undefined, preparedContainerInstanceId ? null : undefined).catch(this.onError);
332
353
  }
333
354
  }
334
- async probeLocal(configuration, signal) {
355
+ async probeLocal(configuration, environment, signal) {
356
+ if (!configuration.mcp)
357
+ return [];
335
358
  const transport = await this.runtime.openLocal({
336
359
  containerName: configuration.containerName,
337
- command: configuration.command,
338
- args: configuration.args,
339
- environment: configuration.environment,
360
+ command: configuration.mcp.command,
361
+ args: configuration.mcp.args,
362
+ environment,
340
363
  }, signal);
364
+ return this.discoverTools(transport, signal);
365
+ }
366
+ async discoverTools(transport, signal) {
341
367
  const client = new Client({ name: "happy2-plugin-health", version: "1.0.0" });
342
368
  try {
343
369
  await withTimeout(client.connect(transport), HEALTH_TIMEOUT_MS, "MCP initialization", signal);
344
370
  await withTimeout(client.ping(), HEALTH_TIMEOUT_MS, "MCP ping", signal);
371
+ const tools = [];
372
+ const cursors = new Set();
373
+ let cursor;
374
+ do {
375
+ const listed = await withTimeout(client.listTools(cursor ? { cursor } : undefined), HEALTH_TIMEOUT_MS, "MCP tool discovery", signal);
376
+ tools.push(...listed.tools.map((tool) => ({
377
+ name: tool.name,
378
+ ...(tool.title ? { title: tool.title } : {}),
379
+ ...(tool.description ? { description: tool.description } : {}),
380
+ inputSchema: tool.inputSchema,
381
+ ...(tool.outputSchema ? { outputSchema: tool.outputSchema } : {}),
382
+ ...(tool.annotations ? { annotations: tool.annotations } : {}),
383
+ })));
384
+ if (tools.length > MAX_PLUGIN_MCP_TOOLS)
385
+ throw new PluginError("broken_configuration", "Plugin MCP exposes too many tools");
386
+ cursor = listed.nextCursor;
387
+ if (cursor && cursors.has(cursor))
388
+ throw new PluginError("broken_configuration", "Plugin MCP tool pagination repeated a cursor");
389
+ if (cursor)
390
+ cursors.add(cursor);
391
+ if (cursors.size > MAX_PLUGIN_MCP_TOOLS)
392
+ throw new PluginError("broken_configuration", "Plugin MCP tool pagination has too many pages");
393
+ } while (cursor);
394
+ return tools;
345
395
  }
346
396
  finally {
347
397
  await client.close().catch(() => transport.close());
348
398
  }
349
399
  }
350
400
  async probeRemote(configuration, signal) {
351
- const destination = await withTimeout(this.urlPolicy.resolveForDelivery(configuration.url), HEALTH_TIMEOUT_MS, "Remote MCP DNS resolution", signal);
352
- const id = createId();
353
- const response = await withTimeout(this.remoteTransport.deliver({
354
- deliveryId: `plugin-health:${configuration.installationId}`,
355
- eventId: id,
356
- eventType: "plugin.mcp.initialize",
357
- url: destination.url,
358
- allowedAddresses: destination.addresses,
359
- headers: {
360
- ...configuration.headers,
361
- accept: "application/json, text/event-stream",
362
- "content-type": "application/json",
363
- "mcp-protocol-version": LATEST_PROTOCOL_VERSION,
364
- },
365
- body: JSON.stringify({
366
- jsonrpc: "2.0",
367
- id,
368
- method: "initialize",
369
- params: {
370
- protocolVersion: LATEST_PROTOCOL_VERSION,
371
- capabilities: {},
372
- clientInfo: { name: "happy2-plugin-health", version: "1.0.0" },
373
- },
374
- }),
375
- }), HEALTH_TIMEOUT_MS, "Remote MCP initialization", signal);
376
- if (response.statusCode < 200 || response.statusCode >= 300)
377
- throw new Error(`Remote MCP initialization returned HTTP ${response.statusCode}`);
378
- const payload = remoteJson(response.body ?? "");
379
- if (!payload ||
380
- payload.jsonrpc !== "2.0" ||
381
- payload.id !== id ||
382
- (!payload.result && !payload.error))
383
- throw new Error("Remote MCP initialization returned an invalid JSON-RPC response");
384
- if (payload.error) {
385
- const error = payload.error && typeof payload.error === "object" && !Array.isArray(payload.error)
386
- ? payload.error
387
- : undefined;
388
- const code = typeof error?.code === "number" ? ` with code ${error.code}` : "";
389
- throw new Error(`Remote MCP initialization returned a JSON-RPC error${code}`);
390
- }
401
+ return this.discoverTools(new RemotePluginMcpTransport({
402
+ headers: configuration.headers,
403
+ installationId: configuration.installationId,
404
+ remoteTransport: this.remoteTransport,
405
+ signal,
406
+ url: configuration.url,
407
+ urlPolicy: this.urlPolicy,
408
+ }), signal);
391
409
  }
392
- async status(installationId, status, detail, error, runtimeImageTag) {
410
+ async status(installationId, status, detail, error, runtimeImageTag, containerInstanceId) {
393
411
  const hint = await pluginInstallationUpdateStatus(this.executor, {
394
412
  installationId,
395
413
  status,
396
414
  detail,
397
415
  error,
398
416
  runtimeImageTag,
417
+ containerInstanceId,
399
418
  });
400
419
  await this.publish(hint).catch(this.onError);
401
420
  }
402
421
  publish(hint) {
403
422
  return this.pubsub.publish(realtimeTopics.server, { type: "sync", ...hint });
404
423
  }
424
+ closeCommand(installationId) {
425
+ const handle = this.commandHandles.get(installationId);
426
+ if (!handle)
427
+ return;
428
+ this.commandHandles.delete(installationId);
429
+ handle.close();
430
+ }
431
+ monitorCommand(installationId, containerName, handle) {
432
+ void handle.wait
433
+ .then(async (result) => {
434
+ if (this.closed || this.commandHandles.get(installationId) !== handle)
435
+ return;
436
+ this.commandHandles.delete(installationId);
437
+ await this.runtime.removeLocal(containerName).catch(this.onError);
438
+ await this.status(installationId, "failed", "Plugin runtime command exited.", commandExitMessage(result), undefined, null);
439
+ })
440
+ .catch(this.onError);
441
+ }
442
+ runtimeEnvironment(configuration, token) {
443
+ return {
444
+ ...configuration.environment,
445
+ HAPPY2_PLUGIN_API_URL: this.hostApiUrl,
446
+ HAPPY2_PLUGIN_API_TOKEN: token,
447
+ };
448
+ }
449
+ pluginRuntimeToken(configuration) {
450
+ if (!configuration.containerInstanceId)
451
+ throw new PluginError("not_ready", "Plugin container incarnation is unavailable");
452
+ return this.tokens.issuePluginRuntimeToken({
453
+ installationId: configuration.installationId,
454
+ containerInstanceId: configuration.containerInstanceId,
455
+ permissions: configuration.permissions,
456
+ });
457
+ }
405
458
  }
406
459
  class PluginFunctionCatalogError extends Error {
407
460
  }
@@ -438,36 +491,29 @@ function mcpErrorMessage(content) {
438
491
  }
439
492
  return "The plugin MCP tool returned an error";
440
493
  }
441
- function remoteJson(body) {
442
- const direct = jsonRecord(body.trim());
443
- if (direct)
444
- return direct;
445
- let data = [];
446
- for (const line of body.split(/\r?\n/)) {
447
- if (!line) {
448
- const event = jsonRecord(data.join("\n"));
449
- if (event)
450
- return event;
451
- data = [];
452
- }
453
- else if (line.startsWith("data:")) {
454
- data.push(line.slice(5).trimStart());
455
- }
456
- }
457
- return jsonRecord(data.join("\n"));
494
+ function commandSurviveStartup(wait, signal) {
495
+ if (signal.aborted)
496
+ return Promise.reject(abortReason(signal));
497
+ return new Promise((resolve, reject) => {
498
+ let settled = false;
499
+ const finish = (action) => {
500
+ if (settled)
501
+ return;
502
+ settled = true;
503
+ clearTimeout(timer);
504
+ signal.removeEventListener("abort", aborted);
505
+ action();
506
+ };
507
+ const aborted = () => finish(() => reject(abortReason(signal)));
508
+ const timer = setTimeout(() => finish(resolve), COMMAND_STARTUP_GRACE_MS);
509
+ signal.addEventListener("abort", aborted, { once: true });
510
+ wait.then((result) => finish(() => reject(new Error(`Plugin command exited during startup: ${commandExitMessage(result)}`))), (error) => finish(() => reject(error)));
511
+ });
458
512
  }
459
- function jsonRecord(source) {
460
- if (!source)
461
- return undefined;
462
- try {
463
- const value = JSON.parse(source);
464
- return value && typeof value === "object" && !Array.isArray(value)
465
- ? value
466
- : undefined;
467
- }
468
- catch {
469
- return undefined;
470
- }
513
+ function commandExitMessage(result) {
514
+ return result.signal
515
+ ? `Plugin command exited after signal ${result.signal}`
516
+ : `Plugin command exited with code ${result.exitCode ?? "unknown"}`;
471
517
  }
472
518
  function withTimeout(promise, timeoutMs, operation, signal) {
473
519
  if (signal?.aborted)
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../sources/modules/plugin/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../sources/modules/plugin/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,yCAAyC,EAAE,MAAM,gDAAgD,CAAC;AAC3G,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAA2B,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAK3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACH,WAAW,EACX,oBAAoB,GAMvB,MAAM,YAAY,CAAC;AAEpB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAC7C,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC,uJAAuJ;AACvJ,MAAM,OAAO,aAAa;IASD,QAAQ;IACR,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,SAAS;IACT,eAAe;IACf,UAAU;IACV,OAAO;IAlBX,WAAW,GAAG,IAAI,GAAG,EAGnC,CAAC;IACa,cAAc,GAAG,IAAI,GAAG,EAAoC,CAAC;IACtE,MAAM,GAAG,KAAK,CAAC;IAEvB,YACqB,QAAyB,EACzB,MAAc,EACd,OAAsB,EACtB,QAA4B,EAC5B,OAA8B,EAC9B,OAAyB,EACzB,MAAoB,EACpB,SAA2B,EAC3B,eAAiC,EACjC,UAAkB,EAClB,OAAiC;wBAVjC,QAAQ;sBACR,MAAM;uBACN,OAAO;wBACP,QAAQ;uBACR,OAAO;uBACP,OAAO;sBACP,MAAM;yBACN,SAAS;+BACT,eAAe;0BACf,UAAU;uBACV,OAAO;IACzB,CAAC;IAEJ,KAAK,CAAC,KAAK;QACP,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAC7C,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5D,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC;YACd,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CACrD;YACD,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAC9C,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACjC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAC9D,CACJ;SACJ,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,KAAK,MAAM,cAAc,IAAI,MAAM,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAKb;QACG,MAAM,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;QACjF,MAAM,cAAc,GAAG,QAAQ,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACrC,IAAI,CAAC,QAAQ,EACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAClB,MAAM,CAAC,MAAM,CAAC,SAAS,CAC1B,CAAC;QACF,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,WAAW;YACzB,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE;YAClF,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,MAAiD,CAAC;QACtD,IAAI,CAAC;YACD,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;gBACtD,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,cAAc;gBACd,MAAM;gBACN,SAAS;gBACT,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;aAC3C,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,WAAW;gBAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,IAAI,WAAW,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,WAAW;YAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC9E,OAAO,MAAM,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CACP,WAAmB,EACnB,QAAgB;QAEhB,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CACtC,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,aAAa,CACtB,CAAC;QACF,IACI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI;YAC9B,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,cAAc;YAExE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACvF,OAAO;YACH,IAAI;YACJ,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;SACvC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,cAAsB;QAClC,MAAM,aAAa,GAAG,MAAM,yCAAyC,CACjE,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,cAAc,CACjB,CAAC;QACF,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG;YACpD,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;QAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CACvC,aAAa,EACb,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAC/C,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC1B,aAAa,EAAE,aAAa,CAAC,aAAa;YAC1C,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO;YAClC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI;YAC5B,WAAW;SACd,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAoB;QACpC,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,MAAM,GAAG,wBAAwB;YACvC,MAAM,IAAI,0BAA0B,CAChC,4BAA4B,KAAK,CAAC,MAAM,+BAA+B,wBAAwB,iBAAiB,CACnH,CAAC;QACN,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,QAAQ,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,SAAS,UAAU;YACvF,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YACtD,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC;YACxD,UAAU,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,YAAY,CACd,YAAoB,EACpB,IAAa,EACb,MAAoB;QAEpB,IAAI,CAAC;YACD,OAAO,MAAM,oBAAoB,CAC7B,6BAA6B,EAC7B,+BAA+B,EAC/B,MAAM,EACN,CAAC,eAAe,EAAE,EAAE,CAChB,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,CAAC,CACvE,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,KAAK,CAAC;YACjC,OAAO;gBACH,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE;oBACH,IAAI,EAAE,wBAAwB;oBAC9B,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;iBAC/B;aACJ,CAAC;QACN,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAChC,YAAoB,EACpB,IAAa,EACb,MAAmB;QAEnB,MAAM,cAAc,GAAG,4BAA4B,CAAC,YAAY,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,UAAU;YAAE,MAAM,UAAU,CAAC,OAAO,CAAC;QACzC,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,iCAAiC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC9D,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,cAAc,KAAK,cAAc;YACtC,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,CACrE,CAAC;QACF,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC;aACjC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO;gBACd,OAAO;oBACH,MAAM,EAAE,QAAiB;oBACzB,KAAK,EAAE;wBACH,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC;wBACxC,IAAI,EAAE,MAAM;qBACf;iBACJ,CAAC;YACN,OAAO,EAAE,MAAM,EAAE,WAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,UAAgC;QAC/D,IAAI,MAAqE,CAAC;QAC1E,IAAI,CAAC;YACD,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;YACxC,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,wBAAwB,UAAU,aAAa,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,MAAM,gCAAgC,CACrD,IAAI,CAAC,QAAQ,EACb,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,mBAAmB,CAC7B,CAAC;QACF,IAAI,CAAC,UAAU;YACX,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,gDAAgD,CAAC,CAAC;QACzF,IACI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc;YAC5B,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAC/B,UAAU,CAAC,aAAa,EACxB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,mBAAmB,CAC7B,CAAC,EACJ,CAAC;YACC,MAAM,IAAI,GAAG,MAAM,iCAAiC,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChE,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;gBAC/C,MAAM,EAAE,yCAAyC;aACpD,CAAC,CAAC;YACH,IAAI,IAAI;gBAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,6CAA6C,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,MAAM,CAAC,cAAc,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3E,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAEO,QAAQ,CAAC,cAAsB;QACnC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;YAAE,OAAO;QAChE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC;aAChE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACrC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IAEO,KAAK,CAAC,UAAU,CACpB,cAAsB,EACtB,MAA+B,EAC/B,MAAiF;QAEjF,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,MAAM,yCAAyC,CACjE,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,cAAc,CACjB,CAAC;QACF,IAAI,aAAa,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,SAAS,CAAC;QAC3D,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3E,MAAM,UAAU,GACZ,aAAa,CAAC,IAAI,KAAK,OAAO;YAC1B,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC;QACpB,MAAM,SAAS,GACX,aAAa,CAAC,IAAI,KAAK,OAAO;YAC1B,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CACxB;gBACI,aAAa,EAAE,aAAa,CAAC,aAAa;gBAC1C,OAAO,EAAE,aAAa,CAAC,GAAI,CAAC,OAAO;gBACnC,IAAI,EAAE,aAAa,CAAC,GAAI,CAAC,IAAI;gBAC7B,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,UAAW,CAAC;aACnE,EACD,MAAM,CACT;YACH,CAAC,CAAC,IAAI,wBAAwB,CAAC;gBACzB,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,cAAc;gBACd,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,MAAM;gBACN,GAAG,EAAE,aAAa,CAAC,GAAG;gBACtB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC5B,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,OAAO,MAAM,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACP,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,cAAsB,EAAE,MAAmB;QACnE,IAAI,qBAAyC,CAAC;QAC9C,IAAI,2BAA+C,CAAC;QACpD,IAAI,aAAmD,CAAC;QACxD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAClC,IAAI,CAAC;YACD,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,MAAM,CACb,cAAc,EACd,WAAW,EACX,yCAAyC,CAC5C,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,yCAAyC,CACjE,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,cAAc,CACjB,CAAC;YACF,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CACtB,aAAa,CAAC,QAAQ,EACtB,aAAa,CAAC,gBAAgB,EAC9B,aAAa,CAAC,SAAS,EACvB,aAAa,CAAC,aAAa,CAC9B,CAAC;YACF,IAAI,aAAa,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACvC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,8BAA8B,CAAC,CAAC;gBAC3E,OAAO;YACX,CAAC;YACD,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,iCAAiC,CAAC,CAAC;gBACjF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;gBAC/E,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7C,MAAM,IAAI,CAAC,MAAM,CACb,cAAc,EACd,OAAO,EACP,+CAA+C,CAClD,CAAC;gBACF,OAAO;YACX,CAAC;YACD,MAAM,UAAU,GAAG,aAAa,CAAC,iBAAiB;gBAC9C,CAAC,CAAC,MAAM,QAAQ,CACV,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACrE,MAAM,CACT;gBACH,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAC5C;gBACI,cAAc;gBACd,aAAa,EAAE,aAAa,CAAC,aAAa;gBAC1C,mBAAmB,EAAE,QAAQ,EAAE;gBAC/B,2BAA2B,EAAE,aAAa,CAAC,mBAAmB;gBAC9D,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,GAAG,CAAC,UAAU;oBACV,CAAC,CAAC;wBACI,KAAK,EAAE;4BACH,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;4BAChD,UAAU;4BACV,GAAG,EAAE,aAAa,CAAC,QAAQ;yBAC9B;qBACJ;oBACH,CAAC,CAAC,EAAE,CAAC;aACZ,EACD,MAAM,CACT,CAAC;YACF,qBAAqB,GAAG,aAAa,CAAC,aAAa,CAAC;YACpD,2BAA2B,GAAG,QAAQ,CAAC,mBAAmB,CAAC;YAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC;gBACpD,cAAc;gBACd,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;gBACjD,WAAW,EAAE,aAAa,CAAC,WAAW;aACzC,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAClE,MAAM,IAAI,CAAC,MAAM,CACb,cAAc,EACd,UAAU,EACV,yDAAyD,EACzD,SAAS,EACT,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,mBAAmB,CAC/B,CAAC;YACF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBACxB,aAAa,GAAG,QAAQ,CAAC,MAAM;oBAC3B,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC;oBAC7E,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAChC;wBACI,aAAa,EAAE,aAAa,CAAC,aAAa;wBAC1C,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO;wBACtC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI;wBAChC,WAAW;qBACd,EACD,MAAM,CACT,CAAC;gBACR,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;gBACvD,MAAM,qBAAqB,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBACxE,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;gBAC/E,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CACb,cAAc,EACd,OAAO,EACP,aAAa,CAAC,GAAG;gBACb,CAAC,CAAC,uDAAuD;gBACzD,CAAC,CAAC,0CAA0C,EAChD,SAAS,EACT,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,mBAAmB,CAC/B,CAAC;YACF,IAAI,aAAa;gBACb,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,aAAa,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,aAAa;oBACzD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAC/C,aAAa,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YAC1C,IAAI,qBAAqB;gBACrB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,CAAC;YACrF,MAAM,IAAI,CAAC,MAAM,CACb,cAAc,EACd,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,QAAQ,EAC1C,MAAM;gBACF,CAAC,CAAC,6DAA6D;gBAC/D,CAAC,CAAC,4CAA4C,EAClD,YAAY,CAAC,KAAK,CAAC,EACnB,SAAS,EACT,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CACjD,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,UAAU,CACpB,aAAqE,EACrE,WAA6C,EAC7C,MAAmB;QAEnB,IAAI,CAAC,aAAa,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAC1C;YACI,aAAa,EAAE,aAAa,CAAC,aAAa;YAC1C,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO;YAClC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI;YAC5B,WAAW;SACd,EACD,MAAM,CACT,CAAC;QACF,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,aAAa,CACvB,SAAoB,EACpB,MAAmB;QAEnB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC;YACD,MAAM,WAAW,CACb,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,MAAM,CACT,CAAC;YACF,MAAM,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YACxE,MAAM,KAAK,GAAyB,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAClC,IAAI,MAA0B,CAAC;YAC/B,GAAG,CAAC;gBACA,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EACjD,iBAAiB,EACjB,oBAAoB,EACpB,MAAM,CACT,CAAC;gBACF,KAAK,CAAC,IAAI,CACN,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjE,CAAC,CAAC,CACN,CAAC;gBACF,IAAI,KAAK,CAAC,MAAM,GAAG,oBAAoB;oBACnC,MAAM,IAAI,WAAW,CACjB,sBAAsB,EACtB,mCAAmC,CACtC,CAAC;gBACN,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC3B,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC7B,MAAM,IAAI,WAAW,CACjB,sBAAsB,EACtB,8CAA8C,CACjD,CAAC;gBACN,IAAI,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,OAAO,CAAC,IAAI,GAAG,oBAAoB;oBACnC,MAAM,IAAI,WAAW,CACjB,sBAAsB,EACtB,+CAA+C,CAClD,CAAC;YACV,CAAC,QAAQ,MAAM,EAAE;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;gBAAS,CAAC;YACP,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW,CACrB,aAAsE,EACtE,MAAmB;QAEnB,OAAO,IAAI,CAAC,aAAa,CACrB,IAAI,wBAAwB,CAAC;YACzB,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,MAAM;YACN,GAAG,EAAE,aAAa,CAAC,GAAG;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC,EACF,MAAM,CACT,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,MAAM,CAChB,cAAsB,EACtB,MAA8E,EAC9E,MAAc,EACd,KAAc,EACd,eAAwB,EACxB,mBAAmC;QAEnC,MAAM,IAAI,GAAG,MAAM,8BAA8B,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7D,cAAc;YACd,MAAM;YACN,MAAM;YACN,KAAK;YACL,eAAe;YACf,mBAAmB;SACtB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAEO,OAAO,CAAC,IAAkB;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;IAEO,YAAY,CAAC,cAAsB;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAEO,cAAc,CAClB,cAAsB,EACtB,aAAqB,EACrB,MAAgC;QAEhC,KAAK,MAAM,CAAC,IAAI;aACX,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACnB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,MAAM;gBAAE,OAAO;YAC9E,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,MAAM,IAAI,CAAC,MAAM,CACb,cAAc,EACd,QAAQ,EACR,gCAAgC,EAChC,kBAAkB,CAAC,MAAM,CAAC,EAC1B,SAAS,EACT,IAAI,CACP,CAAC;QACN,CAAC,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAEO,kBAAkB,CACtB,aAAqE,EACrE,KAAa;QAEb,OAAO;YACH,GAAG,aAAa,CAAC,WAAW;YAC5B,qBAAqB,EAAE,IAAI,CAAC,UAAU;YACtC,uBAAuB,EAAE,KAAK;SACjC,CAAC;IACN,CAAC;IAEO,kBAAkB,CACtB,aAAqE;QAErE,IAAI,CAAC,aAAa,CAAC,mBAAmB;YAClC,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,6CAA6C,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC;YACvC,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;YACtD,WAAW,EAAE,aAAa,CAAC,WAAW;SACzC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,MAAM,0BAA2B,SAAQ,KAAK;CAAG;AAEjD,SAAS,kBAAkB,CAAC,cAAsB,EAAE,QAAgB;IAChE,MAAM,UAAU,GAAG,QAAQ;SACtB,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO,UAAU,cAAc,IAAI,UAAU,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,4BAA4B,CAAC,YAAoB;IACtD,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACjC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9D,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO;aACf,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CACvD,OAAO,CACH,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACxB,KAA4B,CAAC,IAAI,KAAK,MAAM;YAC7C,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CACzD,CACJ;aACA,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;aACvB,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,EAAE,CAAC;QACZ,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IAC1B,CAAC;IACD,OAAO,uCAAuC,CAAC;AACnD,CAAC;AAED,SAAS,qBAAqB,CAC1B,IAAsC,EACtC,MAAmB;IAEnB,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAE,EAAE;YAClC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC;QACb,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC1E,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CACL,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,GAAG,EAAE,CACR,MAAM,CACF,IAAI,KAAK,CACL,yCAAyC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CACxE,CACJ,CACJ,EACL,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CACzC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,kBAAkB,CAAC,MAG3B;IACG,OAAO,MAAM,CAAC,MAAM;QAChB,CAAC,CAAC,sCAAsC,MAAM,CAAC,MAAM,EAAE;QACvD,CAAC,CAAC,mCAAmC,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,WAAW,CAChB,OAAmB,EACnB,SAAiB,EACjB,SAAiB,EACjB,MAAoB;IAEpB,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAqB,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAE,EAAE;YAClC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC;QACb,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACvD,KAAK,GAAG,UAAU,CACd,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,SAAS,YAAY,CAAC,CAAC,CAAC,EAC/D,SAAS,CACZ,CAAC;QACF,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CACR,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EACvC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CACzC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,oBAAoB,CACzB,SAAiB,EACjB,SAAiB,EACjB,MAA+B,EAC/B,MAA2C;IAE3C,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAqB,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,QAAoB,EAAE,EAAE;YACpC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACpD,QAAQ,EAAE,CAAC;QACf,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,GAAG,EAAE;YACvB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAC3D,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,SAAS,YAAY,CAAC,CAAC;YAClD,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC;QACF,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,OAAO,EAAE;aACZ,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACrC,IAAI,CACD,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EACvC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CACzC,CAAC;IACV,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,WAAW,CAAC,MAAmB;IACpC,OAAO,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,UAAU;IACf,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAChC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC"}