@mininglamp-oss/octo-runtime 1.1.0 → 1.1.1

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 (127) hide show
  1. package/README.md +4 -2
  2. package/apps/cli/README.md +3 -1
  3. package/apps/cli/dist/build-info.json +2 -2
  4. package/apps/cli/dist/extras.d.ts +4 -2
  5. package/apps/cli/dist/extras.js +20 -21
  6. package/apps/cli/dist/help.js +3 -0
  7. package/apps/cli/dist/logs.d.ts +10 -0
  8. package/apps/cli/dist/logs.js +186 -0
  9. package/apps/cli/dist/main.d.ts +1 -0
  10. package/apps/cli/dist/main.js +94 -19
  11. package/apps/cli/dist/{default_adapters.json → manifest.json} +5 -0
  12. package/apps/cli/dist/module-manifest.d.ts +3 -0
  13. package/apps/cli/dist/module-manifest.js +11 -0
  14. package/apps/cli/dist/openclaw.js +30 -6
  15. package/apps/cli/dist/output.js +3 -0
  16. package/apps/cli/dist/playboard.js +10 -8
  17. package/apps/cli/dist/status-output.d.ts +10 -0
  18. package/apps/cli/dist/status-output.js +65 -0
  19. package/apps/cli/dist/worker.d.ts +1 -0
  20. package/apps/cli/dist/worker.js +18 -0
  21. package/dist/public/host.d.ts +1 -0
  22. package/node_modules/@mininglamp-oss/octo-runtime-acp-client/package.json +3 -3
  23. package/node_modules/@mininglamp-oss/octo-runtime-adapter-acp/package.json +4 -4
  24. package/node_modules/@mininglamp-oss/octo-runtime-adapter-antigravity/package.json +3 -3
  25. package/node_modules/@mininglamp-oss/octo-runtime-adapter-claude-code/package.json +3 -3
  26. package/node_modules/@mininglamp-oss/octo-runtime-adapter-codebuddy/package.json +4 -4
  27. package/node_modules/@mininglamp-oss/octo-runtime-adapter-codex/package.json +3 -3
  28. package/node_modules/@mininglamp-oss/octo-runtime-adapter-hermes/package.json +2 -2
  29. package/node_modules/@mininglamp-oss/octo-runtime-adapter-kimi-code/package.json +2 -2
  30. package/node_modules/@mininglamp-oss/octo-runtime-adapter-mcode/package.json +2 -2
  31. package/node_modules/@mininglamp-oss/octo-runtime-adapter-openclaw/package.json +3 -3
  32. package/node_modules/@mininglamp-oss/octo-runtime-adapter-opencode/package.json +4 -4
  33. package/node_modules/@mininglamp-oss/octo-runtime-adapter-qodercli/package.json +2 -2
  34. package/node_modules/@mininglamp-oss/octo-runtime-adapter-qoderclicn/package.json +2 -2
  35. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/index.d.ts +1 -0
  36. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/index.js +1 -0
  37. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/module-manifest.d.ts +33 -0
  38. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/module-manifest.js +118 -0
  39. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/runtime-log-worker.js +7 -5
  40. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/runtime-log.d.ts +3 -0
  41. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/runtime-log.js +45 -10
  42. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/service-status.d.ts +11 -0
  43. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/dist/service-status.js +70 -0
  44. package/node_modules/@mininglamp-oss/octo-runtime-adapter-sdk/package.json +5 -3
  45. package/node_modules/@mininglamp-oss/octo-runtime-adapter-zcode-gui/package.json +3 -3
  46. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/build-info.json +2 -2
  47. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/extras.d.ts +4 -2
  48. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/extras.js +20 -21
  49. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/help.js +3 -0
  50. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/logs.d.ts +10 -0
  51. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/logs.js +186 -0
  52. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/main.d.ts +1 -0
  53. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/main.js +94 -19
  54. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/{default_adapters.json → manifest.json} +5 -0
  55. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/module-manifest.d.ts +3 -0
  56. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/module-manifest.js +11 -0
  57. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/openclaw.js +30 -6
  58. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/output.js +3 -0
  59. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/playboard.js +10 -8
  60. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/status-output.d.ts +10 -0
  61. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/status-output.js +65 -0
  62. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/worker.d.ts +1 -0
  63. package/node_modules/@mininglamp-oss/octo-runtime-cli/dist/worker.js +18 -0
  64. package/node_modules/@mininglamp-oss/octo-runtime-cli/package.json +22 -9
  65. package/node_modules/@mininglamp-oss/octo-runtime-cross-service/package.json +2 -2
  66. package/node_modules/@mininglamp-oss/octo-runtime-executor-core/dist/model-input.d.ts +1 -1
  67. package/node_modules/@mininglamp-oss/octo-runtime-executor-core/dist/model-input.js +5 -5
  68. package/node_modules/@mininglamp-oss/octo-runtime-executor-core/package.json +3 -3
  69. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/heartbeat.d.ts +16 -0
  70. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/heartbeat.js +59 -0
  71. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/invocation-manifest.d.ts +1 -0
  72. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/invocation-manifest.js +4 -1
  73. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/manifest-adapters.d.ts +6 -0
  74. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/manifest-adapters.js +88 -0
  75. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/module-specifier.d.ts +1 -2
  76. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/module-specifier.js +2 -9
  77. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/process.d.ts +7 -2
  78. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/process.js +138 -9
  79. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/runner.js +3 -92
  80. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/serve.js +36 -12
  81. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/server.d.ts +4 -1
  82. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/server.js +14 -6
  83. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/service.js +2 -1
  84. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/supervisor.d.ts +2 -2
  85. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/dist/supervisor.js +57 -34
  86. package/node_modules/@mininglamp-oss/octo-runtime-executor-kernel/package.json +8 -16
  87. package/node_modules/@mininglamp-oss/octo-runtime-extra-channel-gateway/config-schema.json +2 -2
  88. package/node_modules/@mininglamp-oss/octo-runtime-extra-channel-gateway/dist/application/im-channel.js +16 -17
  89. package/node_modules/@mininglamp-oss/octo-runtime-extra-channel-gateway/package.json +6 -6
  90. package/node_modules/@mininglamp-oss/octo-runtime-extra-channel-wecom/config-schema.json +2 -2
  91. package/node_modules/@mininglamp-oss/octo-runtime-extra-channel-wecom/package.json +5 -5
  92. package/node_modules/@mininglamp-oss/octo-runtime-extra-webui/config-schema.json +2 -2
  93. package/node_modules/@mininglamp-oss/octo-runtime-extra-webui/dist/index.js +1 -1
  94. package/node_modules/@mininglamp-oss/octo-runtime-extra-webui/dist/store.d.ts +4 -1
  95. package/node_modules/@mininglamp-oss/octo-runtime-extra-webui/dist/store.js +54 -4
  96. package/node_modules/@mininglamp-oss/octo-runtime-extra-webui/package.json +2 -2
  97. package/node_modules/@mininglamp-oss/octo-runtime-host-sdk/dist/extra-config.d.ts +8 -1
  98. package/node_modules/@mininglamp-oss/octo-runtime-host-sdk/dist/extra-config.js +27 -12
  99. package/node_modules/@mininglamp-oss/octo-runtime-host-sdk/dist/extra-service.js +39 -2
  100. package/node_modules/@mininglamp-oss/octo-runtime-host-sdk/dist/index.d.ts +1 -0
  101. package/node_modules/@mininglamp-oss/octo-runtime-host-sdk/package.json +4 -4
  102. package/node_modules/@mininglamp-oss/octo-runtime-protocol/package.json +1 -1
  103. package/node_modules/import-meta-resolve/index.d.ts +19 -0
  104. package/node_modules/import-meta-resolve/index.d.ts.map +1 -0
  105. package/node_modules/import-meta-resolve/index.js +47 -0
  106. package/node_modules/import-meta-resolve/lib/errors.d.ts +24 -0
  107. package/node_modules/import-meta-resolve/lib/errors.d.ts.map +1 -0
  108. package/node_modules/import-meta-resolve/lib/errors.js +504 -0
  109. package/node_modules/import-meta-resolve/lib/get-format.d.ts +13 -0
  110. package/node_modules/import-meta-resolve/lib/get-format.d.ts.map +1 -0
  111. package/node_modules/import-meta-resolve/lib/get-format.js +159 -0
  112. package/node_modules/import-meta-resolve/lib/package-json-reader.d.ts +31 -0
  113. package/node_modules/import-meta-resolve/lib/package-json-reader.d.ts.map +1 -0
  114. package/node_modules/import-meta-resolve/lib/package-json-reader.js +177 -0
  115. package/node_modules/import-meta-resolve/lib/resolve.d.ts +29 -0
  116. package/node_modules/import-meta-resolve/lib/resolve.d.ts.map +1 -0
  117. package/node_modules/import-meta-resolve/lib/resolve.js +1301 -0
  118. package/node_modules/import-meta-resolve/lib/utils.d.ts +6 -0
  119. package/node_modules/import-meta-resolve/lib/utils.d.ts.map +1 -0
  120. package/node_modules/import-meta-resolve/lib/utils.js +47 -0
  121. package/node_modules/import-meta-resolve/license +74 -0
  122. package/node_modules/import-meta-resolve/package.json +78 -0
  123. package/node_modules/import-meta-resolve/readme.md +252 -0
  124. package/package.json +28 -26
  125. package/packages/octo-runtime-extra-channel-gateway/config-schema.json +2 -2
  126. package/packages/octo-runtime-extra-channel-wecom/config-schema.json +2 -2
  127. package/packages/octo-runtime-extra-webui/config-schema.json +2 -2
@@ -54,6 +54,35 @@ export function createExtraService(options) {
54
54
  let server;
55
55
  let binding;
56
56
  let release;
57
+ let healthTimer;
58
+ let healthCheck;
59
+ let lastAvailable;
60
+ const logState = (event, state, code) => logs?.extra(name)(code ? "warn" : "info", event, { state, ...(code ? { code } : {}) });
61
+ const kernelAvailable = () => {
62
+ if (healthCheck)
63
+ return healthCheck;
64
+ healthCheck = (client?.status().then((value) => value.execution_ready, () => false) ?? Promise.resolve(false))
65
+ .then((available) => {
66
+ if (!owner.signal.aborted && available !== lastAvailable) {
67
+ lastAvailable = available;
68
+ logState(available ? "kernel.available" : "kernel.unavailable", available ? "available" : "unavailable");
69
+ }
70
+ return available;
71
+ })
72
+ .finally(() => {
73
+ healthCheck = undefined;
74
+ });
75
+ return healthCheck;
76
+ };
77
+ const watchKernel = () => {
78
+ // Allow one probe at a time and schedule after settlement; emit transitions, not idle heartbeats.
79
+ void kernelAvailable().finally(() => {
80
+ if (owner.signal.aborted || !logging)
81
+ return;
82
+ healthTimer = setTimeout(watchKernel, 5000);
83
+ healthTimer.unref();
84
+ });
85
+ };
57
86
  const sockets = new Set();
58
87
  let finishClosed;
59
88
  const closed = new Promise((resolve) => {
@@ -63,7 +92,7 @@ export function createExtraService(options) {
63
92
  phase,
64
93
  name,
65
94
  pid: process.pid,
66
- kernel_available: (await client?.status().then((value) => value.execution_ready, () => false)) ?? false,
95
+ kernel_available: await kernelAvailable(),
67
96
  plugin: !enabled
68
97
  ? { phase: "disabled" }
69
98
  : phase === "ready" && plugins
@@ -95,6 +124,8 @@ export function createExtraService(options) {
95
124
  if (closing)
96
125
  return closing;
97
126
  phase = "closing";
127
+ logState("service.closing", phase);
128
+ clearTimeout(healthTimer);
98
129
  shutdownUntil ??= shutdownDeadline();
99
130
  const draining = beginDrain();
100
131
  owner.abort();
@@ -139,7 +170,6 @@ export function createExtraService(options) {
139
170
  });
140
171
  });
141
172
  client?.close();
142
- await attempt("logs", () => logs?.close());
143
173
  if (!errors.length)
144
174
  await attempt("control-endpoint", async () => {
145
175
  if (!release)
@@ -148,6 +178,8 @@ export function createExtraService(options) {
148
178
  await rm(controlEndpoint, { force: true });
149
179
  await release();
150
180
  });
181
+ logState(errors.length ? "service.cleanup_incomplete" : "service.closed", errors.length ? "failed" : "closed", errors.length ? "EXTRA_CLEANUP_INCOMPLETE" : undefined);
182
+ await attempt("logs", () => logs?.close());
151
183
  if (acquired) {
152
184
  if (errors.length)
153
185
  ownership.failed = true;
@@ -202,6 +234,9 @@ export function createExtraService(options) {
202
234
  acquired = true;
203
235
  client = attachKernel({ endpoint });
204
236
  logs = new RuntimeLogging(logging);
237
+ logState("service.initializing", phase);
238
+ if (logging)
239
+ watchKernel();
205
240
  plugins = new ExtraPlugins([], client, () => logs.extra(name));
206
241
  if (enabled)
207
242
  await plugins.load({
@@ -257,9 +292,11 @@ export function createExtraService(options) {
257
292
  owner.signal.throwIfAborted();
258
293
  }
259
294
  phase = "ready";
295
+ logState("service.ready", phase);
260
296
  })();
261
297
  initialized = Promise.race([starting, cancelled])
262
298
  .catch(async (error) => {
299
+ logState("service.failed", "failed", "SERVICE_INITIALIZATION_FAILED");
263
300
  throw new ServiceInitializationError(error, await close());
264
301
  })
265
302
  .finally(() => {
@@ -1,4 +1,5 @@
1
1
  export { RUNTIME_RUN_CONTRACT } from "@mininglamp-oss/octo-runtime-protocol";
2
+ export type { RuntimeLoggingOptions, ExtraStatusRecord } from "@mininglamp-oss/octo-runtime-adapter-sdk";
2
3
  export * from "./extras.js";
3
4
  export * from "./extra-config.js";
4
5
  export * from "./context-loader.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mininglamp-oss/octo-runtime-host-sdk",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "exports": {
@@ -19,9 +19,9 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@mininglamp-oss/octo-runtime-adapter-sdk": "1.1.0",
23
- "@mininglamp-oss/octo-runtime-executor-kernel": "1.1.0",
24
- "@mininglamp-oss/octo-runtime-protocol": "1.1.0"
22
+ "@mininglamp-oss/octo-runtime-adapter-sdk": "1.1.1",
23
+ "@mininglamp-oss/octo-runtime-executor-kernel": "1.1.1",
24
+ "@mininglamp-oss/octo-runtime-protocol": "1.1.1"
25
25
  },
26
26
  "types": "./dist/index.d.ts",
27
27
  "files": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mininglamp-oss/octo-runtime-protocol",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "exports": {
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Match `import.meta.resolve` except that `parent` is required (you can pass
3
+ * `import.meta.url`).
4
+ *
5
+ * @param {string} specifier
6
+ * The module specifier to resolve relative to parent
7
+ * (`/example.js`, `./example.js`, `../example.js`, `some-package`, `fs`,
8
+ * etc).
9
+ * @param {string} parent
10
+ * The absolute parent module URL to resolve from.
11
+ * You must pass `import.meta.url` or something else.
12
+ * @returns {string}
13
+ * Returns a string to a full `file:`, `data:`, or `node:` URL
14
+ * to the found thing.
15
+ */
16
+ export function resolve(specifier: string, parent: string): string;
17
+ export { moduleResolve } from "./lib/resolve.js";
18
+ export type ErrnoException = import("./lib/errors.js").ErrnoException;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;GAcG;AACH,mCAXW,MAAM,UAIN,MAAM,GAGJ,MAAM,CA2BlB;;6BA7CY,OAAO,iBAAiB,EAAE,cAAc"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @typedef {import('./lib/errors.js').ErrnoException} ErrnoException
3
+ */
4
+
5
+ import {defaultResolve} from './lib/resolve.js'
6
+
7
+ export {moduleResolve} from './lib/resolve.js'
8
+
9
+ /**
10
+ * Match `import.meta.resolve` except that `parent` is required (you can pass
11
+ * `import.meta.url`).
12
+ *
13
+ * @param {string} specifier
14
+ * The module specifier to resolve relative to parent
15
+ * (`/example.js`, `./example.js`, `../example.js`, `some-package`, `fs`,
16
+ * etc).
17
+ * @param {string} parent
18
+ * The absolute parent module URL to resolve from.
19
+ * You must pass `import.meta.url` or something else.
20
+ * @returns {string}
21
+ * Returns a string to a full `file:`, `data:`, or `node:` URL
22
+ * to the found thing.
23
+ */
24
+ export function resolve(specifier, parent) {
25
+ if (!parent) {
26
+ throw new Error(
27
+ 'Please pass `parent`: `import-meta-resolve` cannot ponyfill that'
28
+ )
29
+ }
30
+
31
+ try {
32
+ return defaultResolve(specifier, {parentURL: parent}).url
33
+ } catch (error) {
34
+ // See: <https://github.com/nodejs/node/blob/45f5c9b/lib/internal/modules/esm/initialize_import_meta.js#L34>
35
+ const exception = /** @type {ErrnoException} */ (error)
36
+
37
+ if (
38
+ (exception.code === 'ERR_UNSUPPORTED_DIR_IMPORT' ||
39
+ exception.code === 'ERR_MODULE_NOT_FOUND') &&
40
+ typeof exception.url === 'string'
41
+ ) {
42
+ return exception.url
43
+ }
44
+
45
+ throw error
46
+ }
47
+ }
@@ -0,0 +1,24 @@
1
+ export namespace codes {
2
+ let ERR_INVALID_ARG_TYPE: new (...parameters: Array<any>) => Error;
3
+ let ERR_INVALID_MODULE_SPECIFIER: new (...parameters: Array<any>) => Error;
4
+ let ERR_INVALID_PACKAGE_CONFIG: new (...parameters: Array<any>) => Error;
5
+ let ERR_INVALID_PACKAGE_TARGET: new (...parameters: Array<any>) => Error;
6
+ let ERR_MODULE_NOT_FOUND: new (...parameters: Array<any>) => Error;
7
+ let ERR_NETWORK_IMPORT_DISALLOWED: new (...parameters: Array<any>) => Error;
8
+ let ERR_PACKAGE_IMPORT_NOT_DEFINED: new (...parameters: Array<any>) => Error;
9
+ let ERR_PACKAGE_PATH_NOT_EXPORTED: new (...parameters: Array<any>) => Error;
10
+ let ERR_UNSUPPORTED_DIR_IMPORT: new (...parameters: Array<any>) => Error;
11
+ let ERR_UNSUPPORTED_RESOLVE_REQUEST: new (...parameters: Array<any>) => Error;
12
+ let ERR_UNKNOWN_FILE_EXTENSION: new (...parameters: Array<any>) => Error;
13
+ let ERR_INVALID_ARG_VALUE: new (...parameters: Array<any>) => Error;
14
+ }
15
+ export type ErrnoExceptionFields = {
16
+ errnode?: number | undefined;
17
+ code?: string | undefined;
18
+ path?: string | undefined;
19
+ syscall?: string | undefined;
20
+ url?: string | undefined;
21
+ };
22
+ export type ErrnoException = Error & ErrnoExceptionFields;
23
+ export type MessageFunction = (...parameters: Array<any>) => string;
24
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["errors.js"],"names":[],"mappings":";kDAwUiC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;0DAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;wDAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;wDAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;kDAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;2DAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;4DAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;2DAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;wDAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;6DAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;wDAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;mDAApB,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;;;cAtUvC,MAAM,GAAG,SAAS;WAClB,MAAM,GAAG,SAAS;WAClB,MAAM,GAAG,SAAS;cAClB,MAAM,GAAG,SAAS;UAClB,MAAM,GAAG,SAAS;;6BAEnB,KAAK,GAAG,oBAAoB;8BAI5B,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM"}