agent0-sdk 0.3.0-rc.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +95 -56
  2. package/dist/core/agent.d.ts +37 -2
  3. package/dist/core/agent.d.ts.map +1 -1
  4. package/dist/core/agent.js +362 -24
  5. package/dist/core/agent.js.map +1 -1
  6. package/dist/core/contracts.d.ts +335 -60
  7. package/dist/core/contracts.d.ts.map +1 -1
  8. package/dist/core/contracts.js +174 -59
  9. package/dist/core/contracts.js.map +1 -1
  10. package/dist/core/endpoint-crawler.d.ts +7 -0
  11. package/dist/core/endpoint-crawler.d.ts.map +1 -1
  12. package/dist/core/endpoint-crawler.js +43 -4
  13. package/dist/core/endpoint-crawler.js.map +1 -1
  14. package/dist/core/feedback-manager.d.ts +9 -29
  15. package/dist/core/feedback-manager.d.ts.map +1 -1
  16. package/dist/core/feedback-manager.js +140 -223
  17. package/dist/core/feedback-manager.js.map +1 -1
  18. package/dist/core/indexer.d.ts.map +1 -1
  19. package/dist/core/indexer.js +4 -2
  20. package/dist/core/indexer.js.map +1 -1
  21. package/dist/core/ipfs-client.d.ts +3 -3
  22. package/dist/core/ipfs-client.d.ts.map +1 -1
  23. package/dist/core/ipfs-client.js +31 -14
  24. package/dist/core/ipfs-client.js.map +1 -1
  25. package/dist/core/oasf-validator.d.ts +16 -0
  26. package/dist/core/oasf-validator.d.ts.map +1 -0
  27. package/dist/core/oasf-validator.js +26 -0
  28. package/dist/core/oasf-validator.js.map +1 -0
  29. package/dist/core/sdk.d.ts +9 -11
  30. package/dist/core/sdk.d.ts.map +1 -1
  31. package/dist/core/sdk.js +37 -37
  32. package/dist/core/sdk.js.map +1 -1
  33. package/dist/core/subgraph-client.d.ts +1 -1
  34. package/dist/core/subgraph-client.d.ts.map +1 -1
  35. package/dist/core/subgraph-client.js +74 -14
  36. package/dist/core/subgraph-client.js.map +1 -1
  37. package/dist/core/web3-client.d.ts +98 -6
  38. package/dist/core/web3-client.d.ts.map +1 -1
  39. package/dist/core/web3-client.js +119 -11
  40. package/dist/core/web3-client.js.map +1 -1
  41. package/dist/models/enums.d.ts +2 -1
  42. package/dist/models/enums.d.ts.map +1 -1
  43. package/dist/models/enums.js +1 -0
  44. package/dist/models/enums.js.map +1 -1
  45. package/dist/models/generated/subgraph-types.d.ts +11 -3
  46. package/dist/models/generated/subgraph-types.d.ts.map +1 -1
  47. package/dist/models/interfaces.d.ts +65 -0
  48. package/dist/models/interfaces.d.ts.map +1 -1
  49. package/dist/taxonomies/generated/all_domains.d.ts +9 -0
  50. package/dist/taxonomies/generated/all_domains.d.ts.map +1 -0
  51. package/dist/taxonomies/generated/all_domains.js +1574 -0
  52. package/dist/taxonomies/generated/all_domains.js.map +1 -0
  53. package/dist/taxonomies/generated/all_skills.d.ts +9 -0
  54. package/dist/taxonomies/generated/all_skills.d.ts.map +1 -0
  55. package/dist/taxonomies/generated/all_skills.js +1039 -0
  56. package/dist/taxonomies/generated/all_skills.js.map +1 -0
  57. package/package.json +7 -4
package/README.md CHANGED
@@ -4,10 +4,11 @@ Agent0 is the TypeScript SDK for agentic economies. It enables agents to registe
4
4
 
5
5
  ## What Does Agent0 SDK Do?
6
6
 
7
- Agent0 SDK v0.21 enables you to:
7
+ Agent0 SDK v1.0.2 enables you to:
8
8
 
9
9
  - **Create and manage agent identities** - Register your AI agent on-chain with a unique identity, configure presentation fields (name, description, image), set wallet addresses, and manage trust models with x402 support
10
10
  - **Advertise agent capabilities** - Publish MCP and A2A endpoints, with automated extraction of MCP tools and A2A skills from endpoints
11
+ - **OASF taxonomies** - Advertise standardized skills and domains using the Open Agentic Schema Framework (OASF) taxonomies for better discovery and interoperability
11
12
  - **Enable permissionless discovery** - Make your agent discoverable by other agents and platforms using rich search by attributes, capabilities, skills, tools, tasks, and x402 support
12
13
  - **Build reputation** - Give and receive feedback, retrieve feedback history, and search agents by reputation with cryptographic authentication
13
14
  - **Cross-chain registration** - One-line registration with IPFS nodes, Pinata, Filecoin, or HTTP URIs
@@ -15,15 +16,17 @@ Agent0 SDK v0.21 enables you to:
15
16
 
16
17
  ## ⚠️ Alpha Release
17
18
 
18
- Agent0 SDK v0.21 is in **alpha** with bugs and is not production ready. We're actively testing and improving it.
19
+ Agent0 SDK v1.0.2 is in **alpha** with bugs and is not production ready. We're actively testing and improving it.
19
20
 
20
- **Bug reports & feedback:** GitHub: [Report issues](https://github.com/agent0lab/agent0-ts/issues) | Telegram: [@marcoderossi](https://t.me/marcoderossi) | Email: marco.derossi@consensys.net
21
+ For breaking changes and migration notes, see `release_notes/RELEASE_NOTES_1.0.2.md`.
22
+
23
+ **Bug reports & feedback:** GitHub: [Report issues](https://github.com/agent0lab/agent0-ts/issues) | Telegram: [Agent0 channel](https://t.me/agent0kitchen) | Email: team@ag0.xyz
21
24
 
22
25
  ## Installation
23
26
 
24
27
  ### Prerequisites
25
28
 
26
- - Node.js 18 or higher
29
+ - Node.js 22 or higher
27
30
  - npm or yarn package manager
28
31
  - Private key for signing transactions (or run in read-only mode)
29
32
  - Access to an Ethereum RPC endpoint (e.g., Alchemy, Infura)
@@ -63,7 +66,7 @@ import { SDK } from 'agent0-sdk';
63
66
  const sdk = new SDK({
64
67
  chainId: 11155111, // Ethereum Sepolia testnet
65
68
  rpcUrl: process.env.RPC_URL!,
66
- signer: process.env.PRIVATE_KEY, // Optional: for write operations
69
+ signer: process.env.PRIVATE_KEY ?? process.env.AGENT_PRIVATE_KEY, // Optional: for write operations
67
70
  ipfs: 'pinata', // Options: 'pinata', 'filecoinPin', 'node'
68
71
  pinataJwt: process.env.PINATA_JWT // For Pinata
69
72
  // Subgraph URL auto-defaults from DEFAULT_SUBGRAPH_URLS
@@ -85,8 +88,15 @@ await agent.setMCP('https://mcp.example.com/'); // Extracts tools, prompts, reso
85
88
  await agent.setA2A('https://a2a.example.com/agent-card.json'); // Extracts skills
86
89
  agent.setENS('myagent.eth');
87
90
 
88
- // Configure wallet and trust
89
- agent.setAgentWallet('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb', 11155111);
91
+ // Add OASF skills and domains (standardized taxonomies)
92
+ agent.addSkill('data_engineering/data_transformation_pipeline', true);
93
+ agent.addSkill('natural_language_processing/natural_language_generation/summarization', true);
94
+ agent.addDomain('finance_and_business/investment_services', true);
95
+ agent.addDomain('technology/data_science/data_science', true);
96
+
97
+ // Optionally set a dedicated agent wallet on-chain (requires new wallet signature).
98
+ // If you want agentWallet = owner wallet, you can skip this (contract sets initial value to owner).
99
+ // await agent.setAgentWallet('0x...', { newWalletSigner: process.env.NEW_WALLET_PRIVATE_KEY });
90
100
  agent.setTrust(true, true, false); // reputation, cryptoEconomic, teeAttestation
91
101
 
92
102
  // Add metadata and set status
@@ -167,26 +177,15 @@ const allResults = await sdk.searchAgents({
167
177
 
168
178
  // Search agents by reputation across chains
169
179
  const reputationResults = await sdk.searchAgentsByReputation(
170
- undefined, // agents
171
- undefined, // tags
172
- undefined, // reviewers
173
- undefined, // capabilities
174
- undefined, // skills
175
- undefined, // tasks
176
- undefined, // names
177
- 80, // minAverageScore
178
- false, // includeRevoked
179
- 20, // pageSize
180
- undefined, // cursor
181
- undefined, // sort
182
- [11155111, 84532] // chains
180
+ { minAverageScore: 80 },
181
+ { includeRevoked: false, pageSize: 20, chains: [11155111, 84532] }
183
182
  );
184
183
 
185
184
  // Get agent from specific chain
186
185
  const agent = await sdk.getAgent('84532:123'); // Base Sepolia
187
186
 
188
187
  // Search feedback for agent on specific chain
189
- const feedbacks = await sdk.searchFeedback('84532:123'); // Base Sepolia
188
+ const feedbacks = await sdk.searchFeedback({ agentId: '84532:123' }); // Base Sepolia
190
189
 
191
190
  // Get reputation summary for agent on specific chain
192
191
  const summary = await sdk.getReputationSummary('84532:123'); // Base Sepolia
@@ -195,28 +194,28 @@ const summary = await sdk.getReputationSummary('84532:123'); // Base Sepolia
195
194
  ### 5. Give and Retrieve Feedback
196
195
 
197
196
  ```typescript
198
- // Prepare feedback (only score is mandatory)
199
- const feedbackFile = sdk.prepareFeedback(
197
+ // Optional: prepare an OFF-CHAIN feedback file (only needed for rich fields)
198
+ const feedbackFile = sdk.prepareFeedbackFile({
199
+ capability: 'tools',
200
+ name: 'code_generation',
201
+ skill: 'python',
202
+ context: { sessionId: 'abc' },
203
+ });
204
+
205
+ // Give feedback (on-chain fields are passed directly)
206
+ const feedback = await sdk.giveFeedback(
200
207
  '11155111:123',
201
- 85, // 0-100 (mandatory)
202
- ['data_analyst', 'finance'], // Optional: tags
203
- undefined, // Optional: text
204
- 'tools', // Optional: capability (MCP capability)
205
- 'code_generation', // Optional: name (MCP tool name)
206
- 'python' // Optional: skill (A2A skill)
208
+ 85, // score (0-100)
209
+ 'data_analyst', // tag1 (optional)
210
+ 'finance', // tag2 (optional)
211
+ 'https://api.example.com/feedback', // endpoint (optional on-chain)
212
+ feedbackFile // optional off-chain file
207
213
  );
208
214
 
209
- // Give feedback
210
- const feedback = await sdk.giveFeedback('11155111:123', feedbackFile);
211
-
212
215
  // Search feedback
213
216
  const feedbackResults = await sdk.searchFeedback(
214
- '11155111:123',
215
- undefined, // tags
216
- ['tools'], // capabilities
217
- undefined, // skills
218
- 80, // minScore
219
- 100 // maxScore
217
+ { agentId: '11155111:123', capabilities: ['tools'] },
218
+ { minScore: 80, maxScore: 100 }
220
219
  );
221
220
 
222
221
  // Get reputation summary
@@ -276,8 +275,8 @@ Use `chainId:agentId` format to specify which chain an agent is on:
276
275
  const agent = await sdk.getAgent('84532:1234'); // Base Sepolia
277
276
 
278
277
  // Search feedback for agent on specific chain
279
- const feedbacks = await sdk.searchFeedback('84532:1234'); // Base Sepolia
280
- const feedbacksDefault = await sdk.searchFeedback('1234'); // Uses default chain
278
+ const feedbacks = await sdk.searchFeedback({ agentId: '84532:1234' }); // Base Sepolia
279
+ const feedbacksDefault = await sdk.searchFeedback({ agentId: '11155111:1234' }); // Default chain
281
280
 
282
281
  // Get reputation summary for agent on specific chain
283
282
  const summary = await sdk.getReputationSummary('84532:1234'); // Base Sepolia
@@ -303,26 +302,14 @@ const allChainsResult = await sdk.searchAgents({
303
302
 
304
303
  // Multi-chain reputation search
305
304
  const reputationResult = await sdk.searchAgentsByReputation(
306
- undefined, // agents
307
- undefined, // tags
308
- undefined, // reviewers
309
- undefined, // capabilities
310
- undefined, // skills
311
- undefined, // tasks
312
- undefined, // names
313
- 80, // minAverageScore
314
- false, // includeRevoked
315
- 20, // pageSize
316
- undefined, // cursor
317
- undefined, // sort
318
- [11155111, 84532] // Multiple chains
305
+ { minAverageScore: 80 },
306
+ { includeRevoked: false, pageSize: 20, chains: [11155111, 84532] }
319
307
  );
320
308
 
321
309
  // Search all chains for agents with reputation
322
310
  const allChainsReputation = await sdk.searchAgentsByReputation(
323
- undefined, undefined, undefined, undefined, undefined, undefined, undefined,
324
- 80, false, 20, undefined, undefined,
325
- 'all' // All configured chains
311
+ { minAverageScore: 80 },
312
+ { includeRevoked: false, pageSize: 20, chains: 'all' }
326
313
  );
327
314
 
328
315
  // Access metadata about queried chains
@@ -352,6 +339,58 @@ const agent = await sdk.getAgent('1234'); // Equivalent to "11155111:1234"
352
339
  const agent = await sdk.getAgent('84532:1234'); // Base Sepolia
353
340
  ```
354
341
 
342
+ ## OASF Taxonomies
343
+
344
+ The SDK includes support for the **Open Agentic Schema Framework (OASF)** taxonomies, enabling agents to advertise standardized skills and domains. This improves discoverability and interoperability across agent platforms.
345
+
346
+ ### Adding Skills and Domains
347
+
348
+ ```typescript
349
+ // Add OASF skills (with optional validation)
350
+ agent.addSkill('advanced_reasoning_planning/strategic_planning', true);
351
+ agent.addSkill('data_engineering/data_transformation_pipeline', true);
352
+
353
+ // Add OASF domains (with optional validation)
354
+ agent.addDomain('finance_and_business/investment_services', true);
355
+ agent.addDomain('technology/data_science/data_visualization', true);
356
+
357
+ // Remove skills/domains
358
+ agent.removeSkill('old_skill');
359
+ agent.removeDomain('old_domain');
360
+ ```
361
+
362
+ ### OASF in Registration Files
363
+
364
+ OASF skills and domains appear in your agent's registration file:
365
+
366
+ ```json
367
+ {
368
+ "endpoints": [
369
+ {
370
+ "name": "OASF",
371
+ "endpoint": "https://github.com/agntcy/oasf/",
372
+ "version": "v0.8.0",
373
+ "skills": [
374
+ "advanced_reasoning_planning/strategic_planning",
375
+ "data_engineering/data_transformation_pipeline"
376
+ ],
377
+ "domains": [
378
+ "finance_and_business/investment_services",
379
+ "technology/data_science/data_science"
380
+ ]
381
+ }
382
+ ]
383
+ }
384
+ ```
385
+
386
+ ### Taxonomy Files
387
+
388
+ The SDK includes complete OASF v0.8.0 taxonomy files:
389
+ - **Skills**: `src/taxonomies/all_skills.json` (136 skills)
390
+ - **Domains**: `src/taxonomies/all_domains.json` (204 domains)
391
+
392
+ Browse these files to find appropriate skill and domain slugs. For more information, see the [OASF specification](https://github.com/agntcy/oasf) and `release_notes/RELEASE_NOTES_0.31.md`.
393
+
355
394
  ## 🚀 Coming Soon
356
395
 
357
396
  - Support for validations
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * Agent class for managing individual agents
3
3
  */
4
+ import { ethers } from 'ethers';
4
5
  import type { RegistrationFile } from '../models/interfaces.js';
5
6
  import type { AgentId, Address, URI } from '../models/types.js';
7
+ import { EndpointType } from '../models/enums.js';
6
8
  import type { SDK } from './sdk.js';
7
9
  /**
8
10
  * Agent class for managing individual agents
@@ -31,7 +33,40 @@ export declare class Agent {
31
33
  setMCP(endpoint: string, version?: string, autoFetch?: boolean): Promise<this>;
32
34
  setA2A(agentcard: string, version?: string, autoFetch?: boolean): Promise<this>;
33
35
  setENS(name: string, version?: string): this;
34
- setAgentWallet(address: Address, chainId: number): this;
36
+ /**
37
+ * Remove endpoint(s) with wildcard semantics (parity with Python SDK).
38
+ *
39
+ * - If no args are provided, removes all endpoints.
40
+ * - If only `type` is provided, removes all endpoints of that type.
41
+ * - If only `value` is provided, removes all endpoints with that value.
42
+ * - If both are provided, removes endpoints that match both.
43
+ */
44
+ removeEndpoint(): this;
45
+ removeEndpoint(opts: {
46
+ type?: EndpointType;
47
+ value?: string;
48
+ }): this;
49
+ removeEndpoint(type?: EndpointType, value?: string): this;
50
+ /**
51
+ * Remove all endpoints.
52
+ */
53
+ removeEndpoints(): this;
54
+ private _getOrCreateOasfEndpoint;
55
+ addSkill(slug: string, validateOASF?: boolean): this;
56
+ removeSkill(slug: string): this;
57
+ addDomain(slug: string, validateOASF?: boolean): this;
58
+ removeDomain(slug: string): this;
59
+ /**
60
+ * Set agent wallet on-chain with EIP-712 signature verification (ERC-8004 Jan 2026).
61
+ *
62
+ * This is a clean breaking API: it is on-chain only.
63
+ * If the agent is not registered yet, this throws.
64
+ */
65
+ setAgentWallet(newWallet: Address, opts?: {
66
+ deadline?: number;
67
+ newWalletSigner?: string | ethers.Signer;
68
+ signature?: string | Uint8Array;
69
+ }): Promise<string>;
35
70
  setActive(active: boolean): this;
36
71
  setX402Support(x402Support: boolean): this;
37
72
  setTrust(reputation?: boolean, cryptoEconomic?: boolean, teeAttestation?: boolean): this;
@@ -54,7 +89,7 @@ export declare class Agent {
54
89
  /**
55
90
  * Set agent URI (for updates)
56
91
  */
57
- setAgentUri(agentUri: string): Promise<void>;
92
+ setAgentURI(agentURI: string): Promise<void>;
58
93
  /**
59
94
  * Transfer agent ownership
60
95
  */
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAc,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAMpC;;GAEG;AACH,qBAAa,KAAK;IAOJ,OAAO,CAAC,GAAG;IANvB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,qBAAqB,CAAC,CAAU;IACxC,OAAO,CAAC,kBAAkB,CAAC,CAAS;gBAEhB,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB;IAMhE,IAAI,OAAO,IAAI,OAAO,GAAG,SAAS,CAEjC;IAED,IAAI,QAAQ,IAAI,GAAG,GAAG,SAAS,CAE9B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,KAAK,IAAI,GAAG,GAAG,SAAS,CAE3B;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAGpC;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAGpC;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAGpC;IAED,IAAI,aAAa,IAAI,OAAO,GAAG,SAAS,CAEvC;IAED,IAAI,QAAQ,IAAI,MAAM,EAAE,GAAG,SAAS,CAGnC;IAED,IAAI,UAAU,IAAI,MAAM,EAAE,GAAG,SAAS,CAGrC;IAED,IAAI,YAAY,IAAI,MAAM,EAAE,GAAG,SAAS,CAGvC;IAED,IAAI,SAAS,IAAI,MAAM,EAAE,GAAG,SAAS,CAGpC;IAGK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAqB,EAAE,SAAS,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiClG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,EAAE,SAAS,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BnG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,IAAI;IAuBnD;;;;;;;OAOG;IACH,cAAc,IAAI,IAAI;IACtB,cAAc,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,YAAY,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IACnE,cAAc,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IA0BzD;;OAEG;IACH,eAAe,IAAI,IAAI;IAKvB,OAAO,CAAC,wBAAwB;IAmBhC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,IAAI;IAqC3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAyB/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,IAAI;IAqC5D,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAyBhC;;;;;OAKG;IACG,cAAc,CAClB,SAAS,EAAE,OAAO,EAClB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;KACjC,GACA,OAAO,CAAC,MAAM,CAAC;IAsQlB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAMhC,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAM1C,QAAQ,CACN,UAAU,GAAE,OAAe,EAC3B,cAAc,GAAE,OAAe,EAC/B,cAAc,GAAE,OAAe,GAC9B,IAAI;IAWP,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAW9C,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAItC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAS9B,mBAAmB,IAAI,gBAAgB;IAIvC;;OAEG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI;IAelE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA2F/C;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgB/D;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlD;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAgD5G;;OAEG;YACW,mBAAmB;YAuCnB,gBAAgB;YA6BhB,sBAAsB;IA6BpC,OAAO,CAAC,+BAA+B;IA6BvC,OAAO,CAAC,0BAA0B;CA2CnC"}