agentlang 0.3.4 → 0.3.5

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.
package/package.json CHANGED
@@ -1,184 +1,183 @@
1
1
  {
2
- "name": "agentlang",
3
- "description": "The easiest way to build the most reliable AI agents - enterprise-grade teams of AI agents that collaborate with each other and humans",
4
- "version": "0.3.4",
5
- "license": "Sustainable Use License",
6
- "author": "agentlang-ai",
7
- "homepage": "https://github.com/agentlang-ai/agentlang#readme",
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/agentlang-ai/agentlang.git"
11
- },
12
- "bugs": {
13
- "url": "https://github.com/agentlang-ai/agentlang/issues"
14
- },
15
- "keywords": [
16
- "agentlang",
17
- "agents-generation",
18
- "ai-agents",
19
- "enterprise",
20
- "multi-agent",
21
- "no-code",
22
- "agent-teams",
23
- "production-ready"
24
- ],
25
- "files": [
26
- "bin",
27
- "out",
28
- "src",
29
- "LICENSE"
30
- ],
31
- "type": "module",
32
- "publishConfig": {
33
- "access": "public",
34
- "registry": "https://registry.npmjs.org/"
35
- },
36
- "scripts": {
37
- "build": "tsc -b tsconfig.src.json && tsc -b tsconfig.declarations.json && node esbuild.mjs",
38
- "build:ts": "tsc -b tsconfig.src.json",
39
- "watch": "concurrently -n tsc,esbuild -c blue,yellow \"tsc -b tsconfig.src.json --watch\" \"node esbuild.mjs --watch\"",
40
- "lint": "eslint . --ext .ts",
41
- "lint:fix": "eslint . --ext .ts --fix",
42
- "format": "prettier --write \"src/**/*.{js,ts,tsx,json,md}\"",
43
- "format:check": "prettier --check \"src/**/*.{js,ts,tsx,json,md}\"",
44
- "langium:generate": "langium generate",
45
- "langium:generate:production": "langium generate --mode=production",
46
- "langium:watch": "langium generate --watch",
47
- "vscode:prepublish": "npm run build && npm run lint",
48
- "dev": "vite",
49
- "test": "vitest run",
50
- "test:verbose": "VITEST_VERBOSE=true vitest run"
51
- },
52
- "dependencies": {
53
- "@aws-sdk/client-cognito-identity": "^3.828.0",
54
- "@aws-sdk/client-cognito-identity-provider": "^3.828.0",
55
- "@aws-sdk/credential-providers": "^3.828.0",
56
- "@isomorphic-git/lightning-fs": "^4.6.1",
57
- "@langchain/anthropic": "^0.3.32",
58
- "@langchain/core": "^0.3.78",
59
- "@langchain/openai": "^0.6.16",
60
- "amazon-cognito-identity-js": "^6.3.15",
61
- "aws-jwt-verify": "^5.1.0",
62
- "bcryptjs": "^3.0.2",
63
- "buffer": "^6.0.3",
64
- "chalk": "~5.3.0",
65
- "commander": "~11.0.0",
66
- "express": "^5.1.0",
67
- "handlebars": "^4.7.8",
68
- "langchain": "^0.3.36",
69
- "langium": "^3.5.0",
70
- "openapi-client-axios": "^7.6.0",
71
- "pg": "^8.16.1",
72
- "pgvector": "^0.2.1",
73
- "sqlite3": "^5.1.7",
74
- "sql.js": "^1.13.0",
75
- "typeorm": "^0.3.25",
76
- "vscode-languageserver": "^9.0.1",
77
- "winston": "^3.17.0",
78
- "winston-daily-rotate-file": "^5.0.0",
79
- "zod": "^3.25.55"
80
- },
81
- "optionalDependencies": {},
82
- "overrides": {
83
- "semver": "^7.5.3",
84
- "trim-newlines": ">=3.0.1"
85
- },
86
- "devDependencies": {
87
- "@codingame/esbuild-import-meta-url-plugin": "~1.0.2",
88
- "@eslint/js": "^9.26.0",
89
- "@types/cookie-parser": "^1.4.9",
90
- "@types/express": "^5.0.1",
91
- "@types/node": "^18.19.110",
92
- "@types/sql.js": "^1.4.9",
93
- "@types/vscode": "^1.100.0",
94
- "@typescript-eslint/eslint-plugin": "~8.32.1",
95
- "@typescript-eslint/parser": "~8.32.1",
96
- "brace-expansion": ">=2.0.2",
97
- "concurrently": "~8.2.1",
98
- "esbuild": "^0.25.4",
99
- "eslint": "~9.26.0",
100
- "generator-langium": "^3.0.0",
101
- "http-server": "~14.1.1",
102
- "langium-cli": "^3.5.0",
103
- "nodemon": "^3.1.10",
104
- "prettier": "^3.5.3",
105
- "typescript": "^5.8.3",
106
- "typescript-eslint": "^8.32.1",
107
- "vite": "^6.3.5",
108
- "vite-plugin-node-polyfills": "^0.24.0",
109
- "vitest": "^3.1.3",
110
- "vscode-languageclient": "^9.0.1",
111
- "vscode-uri": "^3.1.0"
112
- },
113
- "volta": {
114
- "node": ">=20.0.0",
115
- "npm": ">=10.8.2"
116
- },
117
- "displayName": "agentlang",
118
- "engines": {
119
- "vscode": "^1.67.0",
120
- "node": ">=20.0.0"
121
- },
122
- "categories": [
123
- "Programming Languages"
124
- ],
125
- "contributes": {
126
- "languages": [
127
- {
128
- "id": "agentlang",
129
- "aliases": [
130
- "Agentlang",
131
- "agentlang"
132
- ],
133
- "extensions": [
134
- ".al"
135
- ],
136
- "configuration": "./language-configuration.json"
137
- }
138
- ],
139
- "grammars": [
140
- {
141
- "language": "agentlang",
142
- "scopeName": "source.agentlang",
143
- "path": "syntaxes/agentlang.tmLanguage.json"
144
- }
145
- ]
146
- },
147
- "activationEvents": [
148
- "onLanguage:agentlang"
149
- ],
150
- "main": "./out/extension/main.cjs",
151
- "types": "./out/index.d.ts",
152
- "exports": {
153
- ".": {
154
- "types": "./out/index.d.ts",
155
- "import": "./out/extension/main.cjs",
156
- "require": "./out/extension/main.cjs"
157
- },
158
- "./browser": {
159
- "types": "./out/browser.d.ts",
160
- "import": "./out/browser.js",
161
- "default": "./out/browser.js"
162
- },
163
- "./src/*": {
164
- "types": "./out/*.d.ts",
165
- "import": "./out/*.js",
166
- "require": "./out/*.js",
167
- "default": "./out/*.js"
168
- },
169
- "./out/*": "./out/*"
170
- },
171
- "bin": {
172
- "agentlang-cli": "./bin/cli.js"
173
- },
174
- "lint-staged": {
175
- "*.{js,ts,tsx}": [
176
- "eslint --fix --cache",
177
- "prettier --write"
178
- ],
179
- "*.{json,md,yml,yaml}": [
180
- "prettier --write"
181
- ]
182
- },
183
- "packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad"
184
- }
2
+ "name": "agentlang",
3
+ "description": "The easiest way to build the most reliable AI agents - enterprise-grade teams of AI agents that collaborate with each other and humans",
4
+ "version": "0.3.5",
5
+ "license": "Sustainable Use License",
6
+ "author": "agentlang-ai",
7
+ "homepage": "https://github.com/agentlang-ai/agentlang#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/agentlang-ai/agentlang.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/agentlang-ai/agentlang/issues"
14
+ },
15
+ "keywords": [
16
+ "agentlang",
17
+ "agents-generation",
18
+ "ai-agents",
19
+ "enterprise",
20
+ "multi-agent",
21
+ "no-code",
22
+ "agent-teams",
23
+ "production-ready"
24
+ ],
25
+ "files": [
26
+ "bin",
27
+ "out",
28
+ "src",
29
+ "LICENSE"
30
+ ],
31
+ "type": "module",
32
+ "publishConfig": {
33
+ "access": "public",
34
+ "registry": "https://registry.npmjs.org/"
35
+ },
36
+ "dependencies": {
37
+ "@aws-sdk/client-cognito-identity": "^3.828.0",
38
+ "@aws-sdk/client-cognito-identity-provider": "^3.828.0",
39
+ "@aws-sdk/credential-providers": "^3.828.0",
40
+ "@isomorphic-git/lightning-fs": "^4.6.1",
41
+ "@langchain/anthropic": "^0.3.32",
42
+ "@langchain/core": "^0.3.78",
43
+ "@langchain/openai": "^0.6.16",
44
+ "amazon-cognito-identity-js": "^6.3.15",
45
+ "aws-jwt-verify": "^5.1.0",
46
+ "bcryptjs": "^3.0.2",
47
+ "buffer": "^6.0.3",
48
+ "chalk": "~5.3.0",
49
+ "commander": "~11.0.0",
50
+ "express": "^5.1.0",
51
+ "handlebars": "^4.7.8",
52
+ "langchain": "^0.3.36",
53
+ "langium": "^3.5.0",
54
+ "openapi-client-axios": "^7.6.0",
55
+ "pg": "^8.16.1",
56
+ "pgvector": "^0.2.1",
57
+ "sqlite3": "^5.1.7",
58
+ "sql.js": "^1.13.0",
59
+ "typeorm": "^0.3.25",
60
+ "vscode-languageserver": "^9.0.1",
61
+ "winston": "^3.17.0",
62
+ "winston-daily-rotate-file": "^5.0.0",
63
+ "zod": "^3.25.55"
64
+ },
65
+ "optionalDependencies": {},
66
+ "overrides": {
67
+ "semver": "^7.5.3",
68
+ "trim-newlines": ">=3.0.1"
69
+ },
70
+ "devDependencies": {
71
+ "@codingame/esbuild-import-meta-url-plugin": "~1.0.2",
72
+ "@eslint/js": "^9.26.0",
73
+ "@types/cookie-parser": "^1.4.9",
74
+ "@types/express": "^5.0.1",
75
+ "@types/node": "^18.19.110",
76
+ "@types/sql.js": "^1.4.9",
77
+ "@types/vscode": "^1.100.0",
78
+ "@typescript-eslint/eslint-plugin": "~8.32.1",
79
+ "@typescript-eslint/parser": "~8.32.1",
80
+ "brace-expansion": ">=2.0.2",
81
+ "concurrently": "~8.2.1",
82
+ "esbuild": "^0.25.4",
83
+ "eslint": "~9.26.0",
84
+ "generator-langium": "^3.0.0",
85
+ "http-server": "~14.1.1",
86
+ "langium-cli": "^3.5.0",
87
+ "nodemon": "^3.1.10",
88
+ "prettier": "^3.5.3",
89
+ "typescript": "^5.8.3",
90
+ "typescript-eslint": "^8.32.1",
91
+ "vite": "^6.3.5",
92
+ "vite-plugin-node-polyfills": "^0.24.0",
93
+ "vitest": "^3.1.3",
94
+ "vscode-languageclient": "^9.0.1",
95
+ "vscode-uri": "^3.1.0"
96
+ },
97
+ "volta": {
98
+ "node": ">=20.0.0",
99
+ "npm": ">=10.8.2"
100
+ },
101
+ "displayName": "agentlang",
102
+ "engines": {
103
+ "vscode": "^1.67.0",
104
+ "node": ">=20.0.0"
105
+ },
106
+ "categories": [
107
+ "Programming Languages"
108
+ ],
109
+ "contributes": {
110
+ "languages": [
111
+ {
112
+ "id": "agentlang",
113
+ "aliases": [
114
+ "Agentlang",
115
+ "agentlang"
116
+ ],
117
+ "extensions": [
118
+ ".al"
119
+ ],
120
+ "configuration": "./language-configuration.json"
121
+ }
122
+ ],
123
+ "grammars": [
124
+ {
125
+ "language": "agentlang",
126
+ "scopeName": "source.agentlang",
127
+ "path": "syntaxes/agentlang.tmLanguage.json"
128
+ }
129
+ ]
130
+ },
131
+ "activationEvents": [
132
+ "onLanguage:agentlang"
133
+ ],
134
+ "main": "./out/extension/main.cjs",
135
+ "types": "./out/index.d.ts",
136
+ "exports": {
137
+ ".": {
138
+ "types": "./out/index.d.ts",
139
+ "import": "./out/extension/main.cjs",
140
+ "require": "./out/extension/main.cjs"
141
+ },
142
+ "./browser": {
143
+ "types": "./out/browser.d.ts",
144
+ "import": "./out/browser.js",
145
+ "default": "./out/browser.js"
146
+ },
147
+ "./src/*": {
148
+ "types": "./out/*.d.ts",
149
+ "import": "./out/*.js",
150
+ "require": "./out/*.js",
151
+ "default": "./out/*.js"
152
+ },
153
+ "./out/*": "./out/*"
154
+ },
155
+ "bin": {
156
+ "agentlang-cli": "./bin/cli.js"
157
+ },
158
+ "lint-staged": {
159
+ "*.{js,ts,tsx}": [
160
+ "eslint --fix --cache",
161
+ "prettier --write"
162
+ ],
163
+ "*.{json,md,yml,yaml}": [
164
+ "prettier --write"
165
+ ]
166
+ },
167
+ "scripts": {
168
+ "build": "tsc -b tsconfig.src.json && tsc -b tsconfig.declarations.json && node esbuild.mjs",
169
+ "build:ts": "tsc -b tsconfig.src.json",
170
+ "watch": "concurrently -n tsc,esbuild -c blue,yellow \"tsc -b tsconfig.src.json --watch\" \"node esbuild.mjs --watch\"",
171
+ "lint": "eslint . --ext .ts",
172
+ "lint:fix": "eslint . --ext .ts --fix",
173
+ "format": "prettier --write \"src/**/*.{js,ts,tsx,json,md}\"",
174
+ "format:check": "prettier --check \"src/**/*.{js,ts,tsx,json,md}\"",
175
+ "langium:generate": "langium generate",
176
+ "langium:generate:production": "langium generate --mode=production",
177
+ "langium:watch": "langium generate --watch",
178
+ "vscode:prepublish": "npm run build && npm run lint",
179
+ "dev": "vite",
180
+ "test": "vitest run",
181
+ "test:verbose": "VITEST_VERBOSE=true vitest run"
182
+ }
183
+ }
@@ -28,6 +28,7 @@ import {
28
28
  Statement,
29
29
  } from '../language/generated/ast.js';
30
30
  import {
31
+ maybeInstanceAsString,
31
32
  defineAgentEvent,
32
33
  getOneOfRef,
33
34
  getRelationship,
@@ -1715,7 +1716,7 @@ export async function handleAgentInvocation(
1715
1716
  ): Promise<void> {
1716
1717
  const agent: AgentInstance = await findAgentByName(agentEventInst.name, env);
1717
1718
  const origMsg: any = agentEventInst.lookup('message');
1718
- const msg: string = isString(origMsg) ? origMsg : agentInputAsString(origMsg);
1719
+ const msg: string = isString(origMsg) ? origMsg : maybeInstanceAsString(origMsg);
1719
1720
  const flow = getAgentFlow(agent.name, agent.moduleName);
1720
1721
  if (flow) {
1721
1722
  await handleAgentInvocationWithFlow(agent, flow, msg, env);
@@ -1810,7 +1811,7 @@ async function iterateOnFlow(
1810
1811
  return;
1811
1812
  }
1812
1813
  const r = env.getLastResult();
1813
- const rs = agentInputAsString(r);
1814
+ const rs = maybeInstanceAsString(r);
1814
1815
  console.debug(
1815
1816
  `\n----> Completed execution of step ${step}, iteration id ${iterId} with result:\n${rs}`
1816
1817
  );
@@ -1826,24 +1827,6 @@ async function iterateOnFlow(
1826
1827
  console.debug(`No more flow steps, completed iteration ${iterId} on flow:\n${flow}`);
1827
1828
  }
1828
1829
 
1829
- function agentInputAsString(result: any): string {
1830
- if (!isString(result)) {
1831
- if (result instanceof Instance) {
1832
- const inst = result as Instance;
1833
- return JSON.stringify(inst.asSerializableObject());
1834
- } else if (result instanceof Array) {
1835
- return `[${(result as Array<any>)
1836
- .map((r: any) => {
1837
- return agentInputAsString(r);
1838
- })
1839
- .join(',')}]`;
1840
- } else {
1841
- return JSON.stringify(result);
1842
- }
1843
- }
1844
- return result;
1845
- }
1846
-
1847
1830
  export async function handleOpenApiEvent(eventInst: Instance, env: Environment): Promise<void> {
1848
1831
  const r = await invokeOpenApiEvent(
1849
1832
  eventInst.moduleName,
@@ -1806,6 +1806,13 @@ export class Module {
1806
1806
  });
1807
1807
  }
1808
1808
 
1809
+ getAllDecisionsForAgent(agentName: string): Decision[] {
1810
+ const n = `${agentName}.`;
1811
+ return this.getAllDecisions().filter((d: Decision) => {
1812
+ return d.name.startsWith(n);
1813
+ });
1814
+ }
1815
+
1809
1816
  removeDecision(name: string): boolean {
1810
1817
  for (let i = 0; i < this.entries.length; ++i) {
1811
1818
  const entry = this.entries[i];
@@ -1839,6 +1846,13 @@ export class Module {
1839
1846
  });
1840
1847
  }
1841
1848
 
1849
+ getAllScenariosForAgent(agentName: string): Scenario[] {
1850
+ const n = `${agentName}.`;
1851
+ return this.getAllScenarios().filter((s: Scenario) => {
1852
+ return s.name.startsWith(n);
1853
+ });
1854
+ }
1855
+
1842
1856
  removeScenario(name: string): Module {
1843
1857
  for (let i = 0; i < this.entries.length; ++i) {
1844
1858
  const entry = this.entries[i];
@@ -1872,6 +1886,13 @@ export class Module {
1872
1886
  });
1873
1887
  }
1874
1888
 
1889
+ getAllDirectivesForAgent(agentName: string): Directive[] {
1890
+ const n = `${agentName}.`;
1891
+ return this.getAllDirectives().filter((d: Directive) => {
1892
+ return d.name.startsWith(n);
1893
+ });
1894
+ }
1895
+
1875
1896
  removeDirective(name: string): Module {
1876
1897
  for (let i = 0; i < this.entries.length; ++i) {
1877
1898
  const entry = this.entries[i];
@@ -1905,6 +1926,13 @@ export class Module {
1905
1926
  });
1906
1927
  }
1907
1928
 
1929
+ getAllGlossaryEntriesForAgent(agentName: string): GlossaryEntry[] {
1930
+ const n = `${agentName}.`;
1931
+ return this.getAllGlossaryEntries().filter((ge: GlossaryEntry) => {
1932
+ return ge.name.startsWith(n);
1933
+ });
1934
+ }
1935
+
1908
1936
  removeGlossaryEntry(name: string): Module {
1909
1937
  for (let i = 0; i < this.entries.length; ++i) {
1910
1938
  const entry = this.entries[i];
@@ -3059,7 +3087,7 @@ export class Instance {
3059
3087
  const relsObj: any = {};
3060
3088
  this.relatedInstances.forEach((insts: Instance[], relName: string) => {
3061
3089
  relsObj[relName] = insts.map((inst: Instance) => {
3062
- return inst.asSerializableObject();
3090
+ return maybeInstanceAsString(inst);
3063
3091
  });
3064
3092
  });
3065
3093
  obj.relatedInstances = relsObj;
@@ -3286,6 +3314,28 @@ export class Instance {
3286
3314
  }
3287
3315
  }
3288
3316
 
3317
+ export function maybeInstanceAsString(result: any): string {
3318
+ if (!isString(result)) {
3319
+ try {
3320
+ if (result instanceof Instance) {
3321
+ const inst = result as Instance;
3322
+ return JSON.stringify(inst.asSerializableObject());
3323
+ } else if (result instanceof Array) {
3324
+ return `[${(result as Array<any>)
3325
+ .map((r: any) => {
3326
+ return maybeInstanceAsString(r);
3327
+ })
3328
+ .join(',')}]`;
3329
+ } else {
3330
+ return JSON.stringify(result);
3331
+ }
3332
+ } catch (reason: any) {
3333
+ logger.error(`Failed to serialize object to string - ${reason}`);
3334
+ return `${result}`;
3335
+ }
3336
+ } else return result;
3337
+ }
3338
+
3289
3339
  export function objectAsInstanceAttributes(obj: object | undefined): InstanceAttributes {
3290
3340
  const attrs: InstanceAttributes = newInstanceAttributes();
3291
3341
  if (obj) {
@@ -1,18 +0,0 @@
1
- import { Result, Environment } from '../interpreter.js';
2
- import { ActiveSessionInfo } from '../auth/defs.js';
3
- export declare const CoreFilesModuleName: string;
4
- declare const _default: string;
5
- export default _default;
6
- export declare function createFileRecord(fileInfo: {
7
- filename: string;
8
- originalName: string;
9
- mimetype: string;
10
- size: number;
11
- path: string;
12
- uploadedBy?: string;
13
- }, sessionInfo?: ActiveSessionInfo, callback?: (result: Result) => void, env?: Environment): Promise<Result>;
14
- export declare function findFileByFilename(filename: string, sessionInfo?: ActiveSessionInfo, callback?: (result: Result) => void, env?: Environment): Promise<Result>;
15
- export declare function deleteFileRecord(filename: string, sessionInfo?: ActiveSessionInfo, callback?: (result: Result) => void, env?: Environment): Promise<Result>;
16
- export declare function listAllFiles(sessionInfo?: ActiveSessionInfo, callback?: (result: Result) => void, env?: Environment): Promise<Result>;
17
- export declare function listUserFiles(userId: string, sessionInfo?: ActiveSessionInfo, callback?: (result: Result) => void, env?: Environment): Promise<Result>;
18
- //# sourceMappingURL=files.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/runtime/modules/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAY,MAAM,mBAAmB,CAAC;AAIlE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,eAAO,MAAM,mBAAmB,QAA8B,CAAC;;AAE/D,wBA2DE;AAEF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE;IACR,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,WAAW,CAAC,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EACnC,GAAG,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EACnC,GAAG,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EACnC,GAAG,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAsB,YAAY,CAChC,WAAW,CAAC,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EACnC,GAAG,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EACnC,GAAG,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CAcjB"}