@zincapp/zn-vault-agent 1.3.0
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/README.md +701 -0
- package/deploy/logrotate.d/zn-vault-agent +14 -0
- package/deploy/systemd/zn-vault-agent.service +75 -0
- package/dist/commands/certs.d.ts +3 -0
- package/dist/commands/certs.d.ts.map +1 -0
- package/dist/commands/certs.js +369 -0
- package/dist/commands/certs.js.map +1 -0
- package/dist/commands/exec.d.ts +3 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +193 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +234 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +445 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/setup.d.ts +9 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +346 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +113 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +85 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +126 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +104 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +338 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +164 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +299 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/deployer.d.ts +22 -0
- package/dist/lib/deployer.d.ts.map +1 -0
- package/dist/lib/deployer.js +407 -0
- package/dist/lib/deployer.js.map +1 -0
- package/dist/lib/health.d.ts +68 -0
- package/dist/lib/health.d.ts.map +1 -0
- package/dist/lib/health.js +216 -0
- package/dist/lib/health.js.map +1 -0
- package/dist/lib/logger.d.ts +38 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +161 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/metrics.d.ts +50 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +273 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/secret-deployer.d.ts +22 -0
- package/dist/lib/secret-deployer.d.ts.map +1 -0
- package/dist/lib/secret-deployer.js +201 -0
- package/dist/lib/secret-deployer.js.map +1 -0
- package/dist/lib/validation.d.ts +25 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +257 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/websocket.d.ts +74 -0
- package/dist/lib/websocket.d.ts.map +1 -0
- package/dist/lib/websocket.js +441 -0
- package/dist/lib/websocket.js.map +1 -0
- package/dist/services/api-key-renewal.d.ts +13 -0
- package/dist/services/api-key-renewal.d.ts.map +1 -0
- package/dist/services/api-key-renewal.js +204 -0
- package/dist/services/api-key-renewal.js.map +1 -0
- package/dist/services/npm-auto-update.d.ts +60 -0
- package/dist/services/npm-auto-update.d.ts.map +1 -0
- package/dist/services/npm-auto-update.js +245 -0
- package/dist/services/npm-auto-update.js.map +1 -0
- package/dist/types/update.d.ts +19 -0
- package/dist/types/update.d.ts.map +1 -0
- package/dist/types/update.js +7 -0
- package/dist/types/update.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
// Path: src/lib/validation.ts
|
|
2
|
+
// Configuration validation for zn-vault-agent
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { configLogger as log } from './logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validate a URL format
|
|
8
|
+
*/
|
|
9
|
+
function isValidUrl(url) {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = new URL(url);
|
|
12
|
+
return parsed.protocol === 'http:' || parsed.protocol === 'https:';
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validate octal permission format (e.g., "0640", "0600")
|
|
20
|
+
*/
|
|
21
|
+
function isValidPermissions(mode) {
|
|
22
|
+
return /^0[0-7]{3}$/.test(mode);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a directory exists or can be created
|
|
26
|
+
*/
|
|
27
|
+
function isValidOutputPath(filePath) {
|
|
28
|
+
const dir = path.dirname(filePath);
|
|
29
|
+
if (fs.existsSync(dir)) {
|
|
30
|
+
return { valid: true };
|
|
31
|
+
}
|
|
32
|
+
// Check if parent of parent exists (one level of mkdir is OK)
|
|
33
|
+
const parentDir = path.dirname(dir);
|
|
34
|
+
if (fs.existsSync(parentDir)) {
|
|
35
|
+
return { valid: true };
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
valid: false,
|
|
39
|
+
reason: `Parent directory does not exist: ${parentDir}`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validate a certificate target configuration
|
|
44
|
+
*/
|
|
45
|
+
function validateTarget(target, index) {
|
|
46
|
+
const errors = [];
|
|
47
|
+
const warnings = [];
|
|
48
|
+
const prefix = `targets[${index}]`;
|
|
49
|
+
// Required fields
|
|
50
|
+
if (!target.certId || typeof target.certId !== 'string') {
|
|
51
|
+
errors.push({ field: `${prefix}.certId`, message: 'Certificate ID is required', value: target.certId });
|
|
52
|
+
}
|
|
53
|
+
if (!target.name || typeof target.name !== 'string') {
|
|
54
|
+
errors.push({ field: `${prefix}.name`, message: 'Target name is required', value: target.name });
|
|
55
|
+
}
|
|
56
|
+
// Outputs validation
|
|
57
|
+
if (!target.outputs || typeof target.outputs !== 'object') {
|
|
58
|
+
errors.push({ field: `${prefix}.outputs`, message: 'At least one output path is required' });
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const outputPaths = Object.entries(target.outputs).filter(([, v]) => v);
|
|
62
|
+
if (outputPaths.length === 0) {
|
|
63
|
+
errors.push({ field: `${prefix}.outputs`, message: 'At least one output path must be configured' });
|
|
64
|
+
}
|
|
65
|
+
for (const [key, outputPath] of outputPaths) {
|
|
66
|
+
if (typeof outputPath !== 'string')
|
|
67
|
+
continue;
|
|
68
|
+
// Check path is absolute
|
|
69
|
+
if (!path.isAbsolute(outputPath)) {
|
|
70
|
+
errors.push({
|
|
71
|
+
field: `${prefix}.outputs.${key}`,
|
|
72
|
+
message: 'Output path must be absolute',
|
|
73
|
+
value: outputPath,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Check parent directory exists
|
|
78
|
+
const pathCheck = isValidOutputPath(outputPath);
|
|
79
|
+
if (!pathCheck.valid) {
|
|
80
|
+
warnings.push({
|
|
81
|
+
field: `${prefix}.outputs.${key}`,
|
|
82
|
+
message: pathCheck.reason || 'Output directory may not exist',
|
|
83
|
+
suggestion: `Ensure directory exists: mkdir -p ${path.dirname(outputPath)}`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Mode validation
|
|
90
|
+
if (target.mode && !isValidPermissions(target.mode)) {
|
|
91
|
+
errors.push({
|
|
92
|
+
field: `${prefix}.mode`,
|
|
93
|
+
message: 'Invalid permission format. Use octal format like "0640" or "0600"',
|
|
94
|
+
value: target.mode,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// Owner validation (basic format check)
|
|
98
|
+
if (target.owner && !/^[a-z_][a-z0-9_-]*(:([a-z_][a-z0-9_-]*))?$/i.test(target.owner)) {
|
|
99
|
+
warnings.push({
|
|
100
|
+
field: `${prefix}.owner`,
|
|
101
|
+
message: 'Owner format may be invalid',
|
|
102
|
+
suggestion: 'Use format "user" or "user:group"',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// Reload command warning
|
|
106
|
+
if (target.reloadCmd) {
|
|
107
|
+
warnings.push({
|
|
108
|
+
field: `${prefix}.reloadCmd`,
|
|
109
|
+
message: 'Reload command will be executed with agent privileges',
|
|
110
|
+
suggestion: 'Ensure command is safe and necessary',
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return { errors, warnings };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Validate the full agent configuration
|
|
117
|
+
*/
|
|
118
|
+
export function validateConfig(config) {
|
|
119
|
+
const errors = [];
|
|
120
|
+
const warnings = [];
|
|
121
|
+
// Vault URL
|
|
122
|
+
if (!config.vaultUrl) {
|
|
123
|
+
errors.push({ field: 'vaultUrl', message: 'Vault URL is required' });
|
|
124
|
+
}
|
|
125
|
+
else if (!isValidUrl(config.vaultUrl)) {
|
|
126
|
+
errors.push({ field: 'vaultUrl', message: 'Invalid URL format', value: config.vaultUrl });
|
|
127
|
+
}
|
|
128
|
+
else if (config.vaultUrl.startsWith('http://')) {
|
|
129
|
+
warnings.push({
|
|
130
|
+
field: 'vaultUrl',
|
|
131
|
+
message: 'Using HTTP instead of HTTPS',
|
|
132
|
+
suggestion: 'Use HTTPS for production deployments',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// Tenant ID
|
|
136
|
+
if (!config.tenantId) {
|
|
137
|
+
errors.push({ field: 'tenantId', message: 'Tenant ID is required' });
|
|
138
|
+
}
|
|
139
|
+
// Authentication
|
|
140
|
+
if (!config.auth) {
|
|
141
|
+
errors.push({ field: 'auth', message: 'Authentication configuration is required' });
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
const hasApiKey = !!config.auth.apiKey || !!process.env.ZNVAULT_API_KEY;
|
|
145
|
+
const hasPassword = (!!config.auth.username && !!config.auth.password) ||
|
|
146
|
+
(!!config.auth.username && !!process.env.ZNVAULT_PASSWORD);
|
|
147
|
+
if (!hasApiKey && !hasPassword) {
|
|
148
|
+
errors.push({
|
|
149
|
+
field: 'auth',
|
|
150
|
+
message: 'Either API key or username/password is required',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// Warn if credentials in config file
|
|
154
|
+
if (config.auth.apiKey) {
|
|
155
|
+
warnings.push({
|
|
156
|
+
field: 'auth.apiKey',
|
|
157
|
+
message: 'API key stored in config file',
|
|
158
|
+
suggestion: 'Use ZNVAULT_API_KEY environment variable instead',
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (config.auth.password) {
|
|
162
|
+
warnings.push({
|
|
163
|
+
field: 'auth.password',
|
|
164
|
+
message: 'Password stored in config file',
|
|
165
|
+
suggestion: 'Use ZNVAULT_PASSWORD environment variable instead',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Insecure mode warning
|
|
170
|
+
if (config.insecure) {
|
|
171
|
+
warnings.push({
|
|
172
|
+
field: 'insecure',
|
|
173
|
+
message: 'TLS verification is disabled',
|
|
174
|
+
suggestion: 'Enable TLS verification for production deployments',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
// Targets
|
|
178
|
+
if (!config.targets || !Array.isArray(config.targets)) {
|
|
179
|
+
warnings.push({
|
|
180
|
+
field: 'targets',
|
|
181
|
+
message: 'No certificate targets configured',
|
|
182
|
+
suggestion: 'Add targets using: zn-vault-agent add <cert-id>',
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
else if (config.targets.length === 0) {
|
|
186
|
+
warnings.push({
|
|
187
|
+
field: 'targets',
|
|
188
|
+
message: 'No certificate targets configured',
|
|
189
|
+
suggestion: 'Add targets using: zn-vault-agent add <cert-id>',
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
for (let i = 0; i < config.targets.length; i++) {
|
|
194
|
+
const targetValidation = validateTarget(config.targets[i], i);
|
|
195
|
+
errors.push(...targetValidation.errors);
|
|
196
|
+
warnings.push(...targetValidation.warnings);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Poll interval
|
|
200
|
+
if (config.pollInterval !== undefined) {
|
|
201
|
+
if (typeof config.pollInterval !== 'number' || config.pollInterval < 60) {
|
|
202
|
+
warnings.push({
|
|
203
|
+
field: 'pollInterval',
|
|
204
|
+
message: 'Poll interval is less than 60 seconds',
|
|
205
|
+
suggestion: 'Consider using at least 300 seconds (5 minutes) to reduce load',
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const result = {
|
|
210
|
+
valid: errors.length === 0,
|
|
211
|
+
errors,
|
|
212
|
+
warnings,
|
|
213
|
+
};
|
|
214
|
+
// Log validation results
|
|
215
|
+
if (errors.length > 0) {
|
|
216
|
+
log.error({ errors }, 'Configuration validation failed');
|
|
217
|
+
}
|
|
218
|
+
if (warnings.length > 0) {
|
|
219
|
+
log.warn({ warnings }, 'Configuration has warnings');
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Format validation result for display
|
|
225
|
+
*/
|
|
226
|
+
export function formatValidationResult(result) {
|
|
227
|
+
const lines = [];
|
|
228
|
+
if (result.errors.length > 0) {
|
|
229
|
+
lines.push('Errors:');
|
|
230
|
+
for (const error of result.errors) {
|
|
231
|
+
lines.push(` ✗ ${error.field}: ${error.message}`);
|
|
232
|
+
if (error.value !== undefined) {
|
|
233
|
+
lines.push(` Value: ${JSON.stringify(error.value)}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (result.warnings.length > 0) {
|
|
238
|
+
if (lines.length > 0)
|
|
239
|
+
lines.push('');
|
|
240
|
+
lines.push('Warnings:');
|
|
241
|
+
for (const warning of result.warnings) {
|
|
242
|
+
lines.push(` ⚠ ${warning.field}: ${warning.message}`);
|
|
243
|
+
if (warning.suggestion) {
|
|
244
|
+
lines.push(` Suggestion: ${warning.suggestion}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (result.valid && result.warnings.length === 0) {
|
|
249
|
+
lines.push('✓ Configuration is valid');
|
|
250
|
+
}
|
|
251
|
+
else if (result.valid) {
|
|
252
|
+
lines.push('');
|
|
253
|
+
lines.push('✓ Configuration is valid (with warnings)');
|
|
254
|
+
}
|
|
255
|
+
return lines.join('\n');
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export interface CertificateEvent {
|
|
2
|
+
event: 'certificate.rotated' | 'certificate.created' | 'certificate.deleted';
|
|
3
|
+
certificateId: string;
|
|
4
|
+
fingerprint: string;
|
|
5
|
+
version: number;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SecretEvent {
|
|
9
|
+
event: 'secret.created' | 'secret.updated' | 'secret.rotated' | 'secret.deleted';
|
|
10
|
+
secretId: string;
|
|
11
|
+
alias: string;
|
|
12
|
+
version: number;
|
|
13
|
+
timestamp: string;
|
|
14
|
+
tenantId: string;
|
|
15
|
+
}
|
|
16
|
+
export interface AgentUpdateEvent {
|
|
17
|
+
event: 'update.available';
|
|
18
|
+
channel: 'stable' | 'beta' | 'staging';
|
|
19
|
+
version: string;
|
|
20
|
+
releaseNotes?: string;
|
|
21
|
+
timestamp: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Unified agent event (from /v1/ws/agent)
|
|
25
|
+
*/
|
|
26
|
+
export interface UnifiedAgentEvent {
|
|
27
|
+
type: 'pong' | 'event' | 'subscribed' | 'registered' | 'error';
|
|
28
|
+
topic?: 'certificates' | 'secrets' | 'updates';
|
|
29
|
+
data?: CertificateEvent | SecretEvent | AgentUpdateEvent;
|
|
30
|
+
subscriptions?: {
|
|
31
|
+
certificates: string[];
|
|
32
|
+
secrets: string[];
|
|
33
|
+
updates: string | null;
|
|
34
|
+
};
|
|
35
|
+
agentId?: string;
|
|
36
|
+
message?: string;
|
|
37
|
+
timestamp?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Unified WebSocket client interface for /v1/ws/agent
|
|
41
|
+
*/
|
|
42
|
+
export interface UnifiedWebSocketClient {
|
|
43
|
+
connect(): void;
|
|
44
|
+
disconnect(): void;
|
|
45
|
+
isConnected(): boolean;
|
|
46
|
+
onCertificateEvent(handler: (event: CertificateEvent) => void): void;
|
|
47
|
+
onSecretEvent(handler: (event: SecretEvent) => void): void;
|
|
48
|
+
onUpdateEvent(handler: (event: AgentUpdateEvent) => void): void;
|
|
49
|
+
onConnect(handler: (agentId: string) => void): void;
|
|
50
|
+
onDisconnect(handler: (reason: string) => void): void;
|
|
51
|
+
onError(handler: (error: Error) => void): void;
|
|
52
|
+
updateSubscriptions(subs: {
|
|
53
|
+
certIds?: string[];
|
|
54
|
+
secretIds?: string[];
|
|
55
|
+
updateChannel?: string;
|
|
56
|
+
}): void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create unified WebSocket client for /v1/ws/agent
|
|
60
|
+
*
|
|
61
|
+
* This client connects to a single endpoint and subscribes to topics:
|
|
62
|
+
* - certificates: certificate rotation events
|
|
63
|
+
* - secrets: secret update events
|
|
64
|
+
* - updates: agent update availability events
|
|
65
|
+
*/
|
|
66
|
+
export declare function createUnifiedWebSocketClient(): UnifiedWebSocketClient;
|
|
67
|
+
/**
|
|
68
|
+
* Start the agent daemon with unified WebSocket connection
|
|
69
|
+
*/
|
|
70
|
+
export declare function startDaemon(options?: {
|
|
71
|
+
verbose?: boolean;
|
|
72
|
+
healthPort?: number;
|
|
73
|
+
}): Promise<void>;
|
|
74
|
+
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/lib/websocket.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC;IAC/D,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/C,IAAI,CAAC,EAAE,gBAAgB,GAAG,WAAW,GAAG,gBAAgB,CAAC;IACzD,aAAa,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,UAAU,IAAI,IAAI,CAAC;IACnB,WAAW,IAAI,OAAO,CAAC;IACvB,kBAAkB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3D,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACpD,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/C,mBAAmB,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACvG;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CAwQrE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiNrB"}
|