@kadi.build/deploy-ability 0.0.2 → 0.0.4

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 (103) hide show
  1. package/dist/targets/akash/bids.d.ts +183 -0
  2. package/dist/targets/akash/bids.d.ts.map +1 -0
  3. package/dist/targets/akash/bids.js +247 -0
  4. package/dist/targets/akash/bids.js.map +1 -0
  5. package/dist/targets/akash/certificate-manager.d.ts +89 -167
  6. package/dist/targets/akash/certificate-manager.d.ts.map +1 -1
  7. package/dist/targets/akash/certificate-manager.js +193 -301
  8. package/dist/targets/akash/certificate-manager.js.map +1 -1
  9. package/dist/targets/akash/client.d.ts +644 -0
  10. package/dist/targets/akash/client.d.ts.map +1 -0
  11. package/dist/targets/akash/client.js +972 -0
  12. package/dist/targets/akash/client.js.map +1 -0
  13. package/dist/targets/akash/constants.d.ts +12 -149
  14. package/dist/targets/akash/constants.d.ts.map +1 -1
  15. package/dist/targets/akash/constants.js +14 -136
  16. package/dist/targets/akash/constants.js.map +1 -1
  17. package/dist/targets/akash/deployer.d.ts +3 -82
  18. package/dist/targets/akash/deployer.d.ts.map +1 -1
  19. package/dist/targets/akash/deployer.js +122 -160
  20. package/dist/targets/akash/deployer.js.map +1 -1
  21. package/dist/targets/akash/environment.d.ts +16 -214
  22. package/dist/targets/akash/environment.d.ts.map +1 -1
  23. package/dist/targets/akash/environment.js +20 -210
  24. package/dist/targets/akash/environment.js.map +1 -1
  25. package/dist/targets/akash/index.d.ts +95 -189
  26. package/dist/targets/akash/index.d.ts.map +1 -1
  27. package/dist/targets/akash/index.js +69 -197
  28. package/dist/targets/akash/index.js.map +1 -1
  29. package/dist/targets/akash/lease-monitor.d.ts +3 -21
  30. package/dist/targets/akash/lease-monitor.d.ts.map +1 -1
  31. package/dist/targets/akash/lease-monitor.js +39 -56
  32. package/dist/targets/akash/lease-monitor.js.map +1 -1
  33. package/dist/targets/akash/logs.d.ts +103 -4
  34. package/dist/targets/akash/logs.d.ts.map +1 -1
  35. package/dist/targets/akash/logs.js +12 -3
  36. package/dist/targets/akash/logs.js.map +1 -1
  37. package/dist/targets/akash/pricing.d.ts +12 -191
  38. package/dist/targets/akash/pricing.d.ts.map +1 -1
  39. package/dist/targets/akash/pricing.js +12 -188
  40. package/dist/targets/akash/pricing.js.map +1 -1
  41. package/dist/targets/akash/provider-manager.d.ts +120 -0
  42. package/dist/targets/akash/provider-manager.d.ts.map +1 -0
  43. package/dist/targets/akash/provider-manager.js +574 -0
  44. package/dist/targets/akash/provider-manager.js.map +1 -0
  45. package/dist/targets/akash/sdl-generator.d.ts +2 -2
  46. package/dist/targets/akash/sdl-generator.d.ts.map +1 -1
  47. package/dist/targets/akash/sdl-generator.js +6 -39
  48. package/dist/targets/akash/sdl-generator.js.map +1 -1
  49. package/dist/targets/akash/types.d.ts +66 -243
  50. package/dist/targets/akash/types.d.ts.map +1 -1
  51. package/dist/targets/akash/types.js +4 -41
  52. package/dist/targets/akash/types.js.map +1 -1
  53. package/dist/targets/akash/wallet-manager.d.ts +35 -352
  54. package/dist/targets/akash/wallet-manager.d.ts.map +1 -1
  55. package/dist/targets/akash/wallet-manager.js +37 -439
  56. package/dist/targets/akash/wallet-manager.js.map +1 -1
  57. package/dist/targets/local/deployer.js +4 -4
  58. package/dist/targets/local/deployer.js.map +1 -1
  59. package/dist/types/index.d.ts +1 -1
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/index.js.map +1 -1
  62. package/dist/types/options.d.ts +45 -4
  63. package/dist/types/options.d.ts.map +1 -1
  64. package/dist/utils/registry/manager.js +6 -6
  65. package/dist/utils/registry/manager.js.map +1 -1
  66. package/dist/utils/registry/setup.js +4 -4
  67. package/dist/utils/registry/setup.js.map +1 -1
  68. package/package.json +8 -11
  69. package/dist/targets/akash/bid-selectors.d.ts +0 -251
  70. package/dist/targets/akash/bid-selectors.d.ts.map +0 -1
  71. package/dist/targets/akash/bid-selectors.js +0 -322
  72. package/dist/targets/akash/bid-selectors.js.map +0 -1
  73. package/dist/targets/akash/bid-types.d.ts +0 -297
  74. package/dist/targets/akash/bid-types.d.ts.map +0 -1
  75. package/dist/targets/akash/bid-types.js +0 -89
  76. package/dist/targets/akash/bid-types.js.map +0 -1
  77. package/dist/targets/akash/blockchain-client.d.ts +0 -577
  78. package/dist/targets/akash/blockchain-client.d.ts.map +0 -1
  79. package/dist/targets/akash/blockchain-client.js +0 -803
  80. package/dist/targets/akash/blockchain-client.js.map +0 -1
  81. package/dist/targets/akash/logs.types.d.ts +0 -102
  82. package/dist/targets/akash/logs.types.d.ts.map +0 -1
  83. package/dist/targets/akash/logs.types.js +0 -9
  84. package/dist/targets/akash/logs.types.js.map +0 -1
  85. package/dist/targets/akash/provider-client.d.ts +0 -114
  86. package/dist/targets/akash/provider-client.d.ts.map +0 -1
  87. package/dist/targets/akash/provider-client.js +0 -318
  88. package/dist/targets/akash/provider-client.js.map +0 -1
  89. package/dist/targets/akash/provider-metadata.d.ts +0 -228
  90. package/dist/targets/akash/provider-metadata.d.ts.map +0 -1
  91. package/dist/targets/akash/provider-metadata.js +0 -14
  92. package/dist/targets/akash/provider-metadata.js.map +0 -1
  93. package/dist/targets/akash/provider-service.d.ts +0 -133
  94. package/dist/targets/akash/provider-service.d.ts.map +0 -1
  95. package/dist/targets/akash/provider-service.js +0 -391
  96. package/dist/targets/akash/provider-service.js.map +0 -1
  97. package/dist/targets/akash/query-client.d.ts +0 -125
  98. package/dist/targets/akash/query-client.d.ts.map +0 -1
  99. package/dist/targets/akash/query-client.js +0 -332
  100. package/dist/targets/akash/query-client.js.map +0 -1
  101. package/docs/EXAMPLES.md +0 -293
  102. package/docs/PLACEMENT.md +0 -433
  103. package/docs/STORAGE.md +0 -318
@@ -4,75 +4,34 @@
4
4
  * Provides certificate operations for Akash Network deployments. Certificates are
5
5
  * required for mTLS authentication with Akash providers and are tied to wallet addresses.
6
6
  *
7
- * Key Improvements from kadi-deploy:
8
- * - ✅ ZERO file I/O (caller handles persistence)
9
- * - ✅ ZERO CLI dependencies (no chalk, enquirer, prompts)
10
- * - ✅ ZERO `any` types (proper TypeScript throughout)
11
- * - ✅ Result types for all operations
12
- * - ✅ Composable API (small, focused functions)
13
- * - ✅ Step-by-step comments explaining logic
14
- *
15
- * Design Philosophy:
16
- * This is a LIBRARY, not a CLI. Certificates are passed as data structures.
17
- * The caller (kadi-deploy CLI) handles file I/O, prompts, and display.
18
- *
19
7
  * @module targets/akash/certificate-manager
20
8
  */
21
- import type { SigningStargateClient } from '@cosmjs/stargate';
22
9
  import type { Result } from '../../types/index.js';
23
- import type { WalletContext, AkashProviderTlsCertificate } from './types.js';
10
+ import type { AkashProviderTlsCertificate } from './types.js';
11
+ import type { AkashClient } from './client.js';
24
12
  import { CertificateError } from '../../errors/index.js';
25
- import { type AkashNetwork } from './environment.js';
26
- /**
27
- * Certificate JSON structure (for parsing)
28
- *
29
- * This is the format expected when loading certificates from external sources.
30
- */
13
+ /** Certificate JSON structure (for parsing) */
31
14
  export interface CertificateJson {
32
- /** PEM-encoded X.509 certificate */
33
15
  cert: string;
34
- /** PEM-encoded private key */
35
16
  privateKey: string;
36
- /** PEM-encoded public key */
37
17
  publicKey: string;
38
- /** Optional certificate chain */
39
18
  chain?: string;
40
19
  }
41
- /**
42
- * Certificate broadcast result
43
- *
44
- * Contains the transaction hash and confirmation details.
45
- */
20
+ /** Certificate broadcast result */
46
21
  export interface CertificateBroadcastResult {
47
- /** Transaction hash */
48
22
  transactionHash: string;
49
- /** Block height */
50
23
  height: number;
51
- /** Whether broadcast was successful */
52
24
  success: boolean;
53
25
  }
54
- /**
55
- * On-chain certificate information
56
- *
57
- * Represents whether a certificate exists on the Akash blockchain.
58
- */
26
+ /** On-chain certificate information */
59
27
  export interface OnChainCertificateInfo {
60
- /** Whether certificate exists on blockchain */
61
28
  exists: boolean;
62
- /** Number of certificates found */
63
29
  count: number;
64
30
  }
65
31
  /**
66
32
  * Generate a new Akash certificate
67
33
  *
68
34
  * Creates a fresh X.509 certificate with PEM encoding for mTLS authentication.
69
- * This certificate is tied to the wallet address and can be reused across deployments.
70
- *
71
- * **What this does:**
72
- * 1. Generates RSA key pair (2048-bit)
73
- * 2. Creates X.509 certificate
74
- * 3. Encodes in PEM format
75
- * 4. Returns certificate ready for blockchain broadcast
76
35
  *
77
36
  * @param walletAddress - Akash wallet address to tie certificate to
78
37
  * @returns Result with generated certificate or error
@@ -82,147 +41,110 @@ export interface OnChainCertificateInfo {
82
41
  * const result = generateCertificate('akash1abc...');
83
42
  * if (result.success) {
84
43
  * console.log('Certificate generated:', result.data);
85
- * // Now broadcast to blockchain with broadcastCertificate()
86
44
  * }
87
45
  * ```
88
46
  */
89
- export declare function generateCertificate(walletAddress: string): Result<AkashProviderTlsCertificate, CertificateError>;
47
+ export declare function generateCertificate(walletAddress: string): Promise<Result<AkashProviderTlsCertificate, CertificateError>>;
90
48
  /**
91
49
  * Parse and validate certificate from JSON
92
50
  *
93
- * Converts certificate JSON data into a validated Certificate object.
94
- * Performs comprehensive structure and format validation.
95
- *
96
- * **Validation checks:**
97
- * 1. Object structure (not null/undefined)
98
- * 2. Required fields present (cert, privateKey, publicKey)
99
- * 3. PEM format validation (BEGIN/END markers)
100
- * 4. String type validation
51
+ * Converts certificate JSON data into a validated Certificate object with structure and format validation.
101
52
  *
102
53
  * @param json - Certificate data to parse (from file, API, etc.)
103
54
  * @returns Result with validated certificate or error
104
55
  *
105
56
  * @example
106
57
  * ```typescript
107
- * const certJson = JSON.parse(fileContents);
108
58
  * const result = parseCertificate(certJson);
109
- *
110
59
  * if (result.success) {
111
- * // Certificate is valid and ready to use
112
60
  * await broadcastCertificate(wallet, result.data, client);
113
- * } else {
114
- * console.error('Invalid certificate:', result.error.message);
115
61
  * }
116
62
  * ```
117
63
  */
118
64
  export declare function parseCertificate(json: unknown): Result<AkashProviderTlsCertificate, CertificateError>;
119
65
  /**
120
- * Query certificate from Akash blockchain
121
- *
122
- * Checks if a valid certificate exists on-chain for the wallet address.
123
- * Returns the first valid certificate found, or null if none exist.
124
- *
125
- * **What this does:**
126
- * 1. Connects to Akash RPC endpoint
127
- * 2. Queries certificate module
128
- * 3. Filters for valid certificates only
129
- * 4. Returns first match or null
130
- *
131
- * @param wallet - Wallet context with address
132
- * @param network - Akash network to query
133
- * @returns Result with certificate info or null if not found
134
- *
135
- * @example
136
- * ```typescript
137
- * const result = await queryCertificate(wallet, 'mainnet');
66
+ * Certificate Manager for Akash Network
138
67
  *
139
- * if (result.success && result.data) {
140
- * console.log(`Found ${result.data.count} certificate(s) on-chain`);
141
- * } else if (result.success && !result.data) {
142
- * console.log('No certificate found - need to create one');
143
- * }
144
- * ```
68
+ * Handles certificate operations using AkashClient's SDK instance.
69
+ * Provides methods for querying, broadcasting, and ensuring certificates exist.
145
70
  */
146
- export declare function queryCertificate(wallet: WalletContext, network: AkashNetwork): Promise<Result<OnChainCertificateInfo | null, CertificateError>>;
147
- /**
148
- * Broadcast certificate to Akash blockchain
149
- *
150
- * Submits a certificate transaction to the blockchain, making it available
151
- * for mTLS authentication with providers.
152
- *
153
- * **What this does:**
154
- * 1. Validates certificate structure
155
- * 2. Creates blockchain transaction
156
- * 3. Signs with wallet
157
- * 4. Broadcasts to network
158
- * 5. Returns transaction result
159
- *
160
- * **Important:** Certificate must be generated first with generateCertificate()
161
- *
162
- * @param wallet - Wallet context with signing capability
163
- * @param certificate - Certificate to broadcast
164
- * @param client - Signing client for blockchain transactions
165
- * @returns Result with broadcast result or error
166
- *
167
- * @example
168
- * ```typescript
169
- * // Generate certificate
170
- * const certResult = generateCertificate(wallet.address);
171
- * if (!certResult.success) return;
172
- *
173
- * // Broadcast to blockchain
174
- * const broadcastResult = await broadcastCertificate(
175
- * wallet,
176
- * certResult.data,
177
- * client
178
- * );
179
- *
180
- * if (broadcastResult.success) {
181
- * console.log('Certificate on-chain:', broadcastResult.data.transactionHash);
182
- * }
183
- * ```
184
- */
185
- export declare function broadcastCertificate(wallet: WalletContext, certificate: AkashProviderTlsCertificate, client: SigningStargateClient): Promise<Result<CertificateBroadcastResult, CertificateError>>;
186
- /**
187
- * Ensure certificate exists (convenience function)
188
- *
189
- * High-level function that handles the complete certificate workflow:
190
- * 1. Use existing certificate if provided
191
- * 2. Query blockchain for existing certificate
192
- * 3. Generate and broadcast new certificate if needed
193
- *
194
- * This is a convenience wrapper for the common case where you just want
195
- * "a valid certificate" without manually orchestrating the steps.
196
- *
197
- * @param wallet - Wallet context
198
- * @param network - Akash network
199
- * @param client - Signing client for blockchain operations
200
- * @param options - Optional existing certificate
201
- * @returns Result with valid certificate or error
202
- *
203
- * @example
204
- * ```typescript
205
- * // Simple: just get me a valid certificate
206
- * const result = await ensureCertificate(wallet, 'mainnet', client);
207
- *
208
- * if (result.success) {
209
- * // Certificate is ready to use with providers
210
- * await sendManifest(lease, manifest, result.data);
211
- * }
212
- * ```
213
- *
214
- * @example With existing certificate
215
- * ```typescript
216
- * // Use existing cert if available, otherwise create
217
- * const result = await ensureCertificate(
218
- * wallet,
219
- * 'mainnet',
220
- * client,
221
- * { existingCertificate: loadedCert }
222
- * );
223
- * ```
224
- */
225
- export declare function ensureCertificate(wallet: WalletContext, network: AkashNetwork, client: SigningStargateClient, options?: {
226
- existingCertificate?: AkashProviderTlsCertificate;
227
- }): Promise<Result<AkashProviderTlsCertificate, CertificateError>>;
71
+ export declare class CertificateManager {
72
+ private readonly client;
73
+ /**
74
+ * Create a new CertificateManager
75
+ *
76
+ * @param client - AkashClient instance to use for blockchain operations
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const client = new AkashClient({ network: 'mainnet', signer });
81
+ * const certManager = new CertificateManager(client);
82
+ * ```
83
+ */
84
+ constructor(client: AkashClient);
85
+ /**
86
+ * Query certificate from Akash blockchain
87
+ *
88
+ * Checks if a valid certificate exists on-chain for the wallet address.
89
+ *
90
+ * @param walletAddress - Akash wallet address to query
91
+ * @returns Result with certificate info or null if not found
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * const result = await certManager.query('akash1abc...');
96
+ * if (result.success && result.data) {
97
+ * console.log(`Found ${result.data.count} certificate(s) on-chain`);
98
+ * }
99
+ * ```
100
+ */
101
+ query(walletAddress: string): Promise<Result<OnChainCertificateInfo | null, CertificateError>>;
102
+ /**
103
+ * Broadcast certificate to Akash blockchain
104
+ *
105
+ * Submits a certificate transaction to the blockchain, making it available
106
+ * for mTLS authentication with providers.
107
+ *
108
+ * Requires: Client must have signing capability (signer configured)
109
+ *
110
+ * @param walletAddress - Wallet address that owns the certificate
111
+ * @param certificate - Certificate to broadcast
112
+ * @returns Result with broadcast result or error
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const cert = await generateCertificate('akash1abc...');
117
+ * const result = await certManager.broadcast('akash1abc...', cert.data);
118
+ * if (result.success) {
119
+ * console.log('Certificate on-chain:', result.data.transactionHash);
120
+ * }
121
+ * ```
122
+ */
123
+ broadcast(walletAddress: string, certificate: AkashProviderTlsCertificate): Promise<Result<CertificateBroadcastResult, CertificateError>>;
124
+ /**
125
+ * Get or create certificate (convenience method)
126
+ *
127
+ * Handles the complete certificate workflow:
128
+ * 1. Use existing certificate if provided and valid
129
+ * 2. Check blockchain for existing certificate
130
+ * 3. Generate and broadcast new certificate if none exists
131
+ *
132
+ * Requires: Client must have signing capability for certificate creation
133
+ *
134
+ * @param walletAddress - Wallet address to ensure certificate for
135
+ * @param options - Optional existing certificate
136
+ * @returns Result with valid certificate or error
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const result = await certManager.getOrCreate('akash1abc...');
141
+ * if (result.success) {
142
+ * await sendManifest(lease, manifest, result.data);
143
+ * }
144
+ * ```
145
+ */
146
+ getOrCreate(walletAddress: string, options?: {
147
+ existingCertificate?: AkashProviderTlsCertificate;
148
+ }): Promise<Result<AkashProviderTlsCertificate, CertificateError>>;
149
+ }
228
150
  //# sourceMappingURL=certificate-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"certificate-manager.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/certificate-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAyB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,GACpB,MAAM,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAuCvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAmEvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,sBAAsB,GAAG,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAiDlE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,2BAA2B,EACxC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC,CA0D/D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,qBAAqB,EAC7B,OAAO,CAAC,EAAE;IACR,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CACnD,GACA,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC,CA+DhE"}
1
+ {"version":3,"file":"certificate-manager.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/certificate-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAyB,MAAM,uBAAuB,CAAC;AAEhF,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,uCAAuC;AACvC,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC,CAqChE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAoDvD;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IAErC;;;;;;;;;;OAUG;gBACS,MAAM,EAAE,WAAW;IAI/B;;;;;;;;;;;;;;;OAeG;IACG,KAAK,CACT,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,sBAAsB,GAAG,IAAI,EAAE,gBAAgB,CAAC,CAAC;IA+BnE;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,SAAS,CACb,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC;IAoDhE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,WAAW,CACf,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;KACnD,GACA,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;CAmDlE"}