@nahisaho/musubix-security 1.8.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.
Files changed (116) hide show
  1. package/README.md +105 -0
  2. package/bin/musubix-security-mcp.js +12 -0
  3. package/bin/musubix-security.js +12 -0
  4. package/dist/analysis/dependency-auditor.d.ts +30 -0
  5. package/dist/analysis/dependency-auditor.d.ts.map +1 -0
  6. package/dist/analysis/dependency-auditor.js +325 -0
  7. package/dist/analysis/dependency-auditor.js.map +1 -0
  8. package/dist/analysis/index.d.ts +9 -0
  9. package/dist/analysis/index.d.ts.map +1 -0
  10. package/dist/analysis/index.js +9 -0
  11. package/dist/analysis/index.js.map +1 -0
  12. package/dist/analysis/secret-detector.d.ts +44 -0
  13. package/dist/analysis/secret-detector.d.ts.map +1 -0
  14. package/dist/analysis/secret-detector.js +465 -0
  15. package/dist/analysis/secret-detector.js.map +1 -0
  16. package/dist/analysis/taint-analyzer.d.ts +62 -0
  17. package/dist/analysis/taint-analyzer.d.ts.map +1 -0
  18. package/dist/analysis/taint-analyzer.js +519 -0
  19. package/dist/analysis/taint-analyzer.js.map +1 -0
  20. package/dist/analysis/vulnerability-scanner.d.ts +58 -0
  21. package/dist/analysis/vulnerability-scanner.d.ts.map +1 -0
  22. package/dist/analysis/vulnerability-scanner.js +417 -0
  23. package/dist/analysis/vulnerability-scanner.js.map +1 -0
  24. package/dist/cli/commands.d.ts +15 -0
  25. package/dist/cli/commands.d.ts.map +1 -0
  26. package/dist/cli/commands.js +405 -0
  27. package/dist/cli/commands.js.map +1 -0
  28. package/dist/cli/index.d.ts +6 -0
  29. package/dist/cli/index.d.ts.map +1 -0
  30. package/dist/cli/index.js +6 -0
  31. package/dist/cli/index.js.map +1 -0
  32. package/dist/index.d.ts +42 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +66 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/infrastructure/ast-parser.d.ts +87 -0
  37. package/dist/infrastructure/ast-parser.d.ts.map +1 -0
  38. package/dist/infrastructure/ast-parser.js +273 -0
  39. package/dist/infrastructure/ast-parser.js.map +1 -0
  40. package/dist/infrastructure/cache.d.ts +100 -0
  41. package/dist/infrastructure/cache.d.ts.map +1 -0
  42. package/dist/infrastructure/cache.js +288 -0
  43. package/dist/infrastructure/cache.js.map +1 -0
  44. package/dist/infrastructure/config-loader.d.ts +35 -0
  45. package/dist/infrastructure/config-loader.d.ts.map +1 -0
  46. package/dist/infrastructure/config-loader.js +358 -0
  47. package/dist/infrastructure/config-loader.js.map +1 -0
  48. package/dist/infrastructure/file-scanner.d.ts +94 -0
  49. package/dist/infrastructure/file-scanner.d.ts.map +1 -0
  50. package/dist/infrastructure/file-scanner.js +189 -0
  51. package/dist/infrastructure/file-scanner.js.map +1 -0
  52. package/dist/infrastructure/index.d.ts +9 -0
  53. package/dist/infrastructure/index.d.ts.map +1 -0
  54. package/dist/infrastructure/index.js +9 -0
  55. package/dist/infrastructure/index.js.map +1 -0
  56. package/dist/mcp/index.d.ts +7 -0
  57. package/dist/mcp/index.d.ts.map +1 -0
  58. package/dist/mcp/index.js +7 -0
  59. package/dist/mcp/index.js.map +1 -0
  60. package/dist/mcp/server.d.ts +34 -0
  61. package/dist/mcp/server.d.ts.map +1 -0
  62. package/dist/mcp/server.js +88 -0
  63. package/dist/mcp/server.js.map +1 -0
  64. package/dist/mcp/tools.d.ts +88 -0
  65. package/dist/mcp/tools.d.ts.map +1 -0
  66. package/dist/mcp/tools.js +443 -0
  67. package/dist/mcp/tools.js.map +1 -0
  68. package/dist/services/fix-generator.d.ts +56 -0
  69. package/dist/services/fix-generator.d.ts.map +1 -0
  70. package/dist/services/fix-generator.js +346 -0
  71. package/dist/services/fix-generator.js.map +1 -0
  72. package/dist/services/fix-verifier.d.ts +62 -0
  73. package/dist/services/fix-verifier.d.ts.map +1 -0
  74. package/dist/services/fix-verifier.js +224 -0
  75. package/dist/services/fix-verifier.js.map +1 -0
  76. package/dist/services/index.d.ts +9 -0
  77. package/dist/services/index.d.ts.map +1 -0
  78. package/dist/services/index.js +13 -0
  79. package/dist/services/index.js.map +1 -0
  80. package/dist/services/report-generator.d.ts +87 -0
  81. package/dist/services/report-generator.d.ts.map +1 -0
  82. package/dist/services/report-generator.js +463 -0
  83. package/dist/services/report-generator.js.map +1 -0
  84. package/dist/services/security-service.d.ts +151 -0
  85. package/dist/services/security-service.d.ts.map +1 -0
  86. package/dist/services/security-service.js +279 -0
  87. package/dist/services/security-service.js.map +1 -0
  88. package/dist/types/config.d.ts +188 -0
  89. package/dist/types/config.d.ts.map +1 -0
  90. package/dist/types/config.js +89 -0
  91. package/dist/types/config.js.map +1 -0
  92. package/dist/types/dependency.d.ts +266 -0
  93. package/dist/types/dependency.d.ts.map +1 -0
  94. package/dist/types/dependency.js +7 -0
  95. package/dist/types/dependency.js.map +1 -0
  96. package/dist/types/fix.d.ts +213 -0
  97. package/dist/types/fix.d.ts.map +1 -0
  98. package/dist/types/fix.js +7 -0
  99. package/dist/types/fix.js.map +1 -0
  100. package/dist/types/index.d.ts +14 -0
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/dist/types/index.js +8 -0
  103. package/dist/types/index.js.map +1 -0
  104. package/dist/types/secret.d.ts +151 -0
  105. package/dist/types/secret.d.ts.map +1 -0
  106. package/dist/types/secret.js +91 -0
  107. package/dist/types/secret.js.map +1 -0
  108. package/dist/types/taint.d.ts +182 -0
  109. package/dist/types/taint.d.ts.map +1 -0
  110. package/dist/types/taint.js +24 -0
  111. package/dist/types/taint.js.map +1 -0
  112. package/dist/types/vulnerability.d.ts +136 -0
  113. package/dist/types/vulnerability.d.ts.map +1 -0
  114. package/dist/types/vulnerability.js +7 -0
  115. package/dist/types/vulnerability.js.map +1 -0
  116. package/package.json +87 -0
@@ -0,0 +1,417 @@
1
+ /**
2
+ * @fileoverview Vulnerability scanner - static analysis for security vulnerabilities
3
+ * @module @nahisaho/musubix-security/analysis/vulnerability-scanner
4
+ * @trace REQ-SEC-SCAN-001, REQ-SEC-SCAN-002, REQ-SEC-SCAN-003
5
+ */
6
+ import { SyntaxKind } from 'ts-morph';
7
+ import { getASTParser } from '../infrastructure/ast-parser.js';
8
+ import { createFileScanner } from '../infrastructure/file-scanner.js';
9
+ /**
10
+ * Generate vulnerability ID
11
+ */
12
+ let vulnCounter = 0;
13
+ function generateVulnId() {
14
+ const date = new Date();
15
+ const dateStr = date.toISOString().slice(0, 10).replace(/-/g, '');
16
+ return `VULN-${dateStr}-${String(++vulnCounter).padStart(3, '0')}`;
17
+ }
18
+ /**
19
+ * Reset vulnerability counter (for testing)
20
+ */
21
+ export function resetVulnCounter() {
22
+ vulnCounter = 0;
23
+ }
24
+ /**
25
+ * SQL Injection detector
26
+ * @trace REQ-SEC-SCAN-002
27
+ */
28
+ const sqlInjectionDetector = {
29
+ ruleId: 'SEC-001',
30
+ detect(sourceFile, parser) {
31
+ const vulnerabilities = [];
32
+ const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
33
+ for (const call of calls) {
34
+ const funcName = parser.getFunctionName(call);
35
+ const sqlMethods = ['query', 'execute', 'raw', 'exec'];
36
+ if (funcName && sqlMethods.includes(funcName)) {
37
+ const args = call.getArguments();
38
+ if (args.length > 0) {
39
+ const firstArg = args[0];
40
+ // Check for template literal (potential string concatenation)
41
+ if (firstArg.getKind() === SyntaxKind.TemplateExpression) {
42
+ vulnerabilities.push({
43
+ id: generateVulnId(),
44
+ type: 'injection',
45
+ severity: 'critical',
46
+ cwes: ['CWE-89'],
47
+ owasp: ['A03:2021'],
48
+ location: parser.getLocation(call),
49
+ description: 'Potential SQL injection: Template literal used in SQL query',
50
+ recommendation: 'Use parameterized queries instead of string interpolation',
51
+ confidence: 0.85,
52
+ ruleId: this.ruleId,
53
+ codeSnippet: parser.extractSnippet(call),
54
+ detectedAt: new Date(),
55
+ });
56
+ }
57
+ // Check for binary expression (string concatenation)
58
+ if (firstArg.getKind() === SyntaxKind.BinaryExpression) {
59
+ vulnerabilities.push({
60
+ id: generateVulnId(),
61
+ type: 'injection',
62
+ severity: 'critical',
63
+ cwes: ['CWE-89'],
64
+ owasp: ['A03:2021'],
65
+ location: parser.getLocation(call),
66
+ description: 'Potential SQL injection: String concatenation in SQL query',
67
+ recommendation: 'Use parameterized queries instead of string concatenation',
68
+ confidence: 0.9,
69
+ ruleId: this.ruleId,
70
+ codeSnippet: parser.extractSnippet(call),
71
+ detectedAt: new Date(),
72
+ });
73
+ }
74
+ }
75
+ }
76
+ }
77
+ return vulnerabilities;
78
+ },
79
+ };
80
+ /**
81
+ * Command injection detector
82
+ */
83
+ const commandInjectionDetector = {
84
+ ruleId: 'SEC-002',
85
+ detect(sourceFile, parser) {
86
+ const vulnerabilities = [];
87
+ const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
88
+ for (const call of calls) {
89
+ const funcName = parser.getFunctionName(call);
90
+ const cmdMethods = ['exec', 'execSync', 'spawn', 'spawnSync', 'execFile'];
91
+ if (funcName && cmdMethods.includes(funcName)) {
92
+ const args = call.getArguments();
93
+ if (args.length > 0) {
94
+ const firstArg = args[0];
95
+ // Check for template literal or binary expression
96
+ if (firstArg.getKind() === SyntaxKind.TemplateExpression ||
97
+ firstArg.getKind() === SyntaxKind.BinaryExpression) {
98
+ vulnerabilities.push({
99
+ id: generateVulnId(),
100
+ type: 'command-injection',
101
+ severity: 'critical',
102
+ cwes: ['CWE-78'],
103
+ owasp: ['A03:2021'],
104
+ location: parser.getLocation(call),
105
+ description: 'Potential command injection: Unsafe command construction',
106
+ recommendation: 'Use execFile with array arguments or properly escape shell arguments',
107
+ confidence: 0.85,
108
+ ruleId: this.ruleId,
109
+ codeSnippet: parser.extractSnippet(call),
110
+ detectedAt: new Date(),
111
+ });
112
+ }
113
+ }
114
+ }
115
+ }
116
+ return vulnerabilities;
117
+ },
118
+ };
119
+ /**
120
+ * Path traversal detector
121
+ */
122
+ const pathTraversalDetector = {
123
+ ruleId: 'SEC-003',
124
+ detect(sourceFile, parser) {
125
+ const vulnerabilities = [];
126
+ const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
127
+ for (const call of calls) {
128
+ const funcName = parser.getFunctionName(call);
129
+ const fsMethods = [
130
+ 'readFile', 'readFileSync', 'writeFile', 'writeFileSync',
131
+ 'readdir', 'readdirSync', 'unlink', 'unlinkSync',
132
+ 'stat', 'statSync', 'access', 'accessSync',
133
+ ];
134
+ if (funcName && fsMethods.includes(funcName)) {
135
+ const args = call.getArguments();
136
+ if (args.length > 0) {
137
+ const firstArg = args[0];
138
+ // Check for template literal or binary expression
139
+ if (firstArg.getKind() === SyntaxKind.TemplateExpression ||
140
+ firstArg.getKind() === SyntaxKind.BinaryExpression) {
141
+ vulnerabilities.push({
142
+ id: generateVulnId(),
143
+ type: 'path-traversal',
144
+ severity: 'high',
145
+ cwes: ['CWE-22'],
146
+ owasp: ['A01:2021'],
147
+ location: parser.getLocation(call),
148
+ description: 'Potential path traversal: User input may be used in file path',
149
+ recommendation: 'Validate and sanitize file paths, use path.resolve() with base directory check',
150
+ confidence: 0.75,
151
+ ruleId: this.ruleId,
152
+ codeSnippet: parser.extractSnippet(call),
153
+ detectedAt: new Date(),
154
+ });
155
+ }
156
+ }
157
+ }
158
+ }
159
+ return vulnerabilities;
160
+ },
161
+ };
162
+ /**
163
+ * XSS detector
164
+ */
165
+ const xssDetector = {
166
+ ruleId: 'SEC-004',
167
+ detect(sourceFile, parser) {
168
+ const vulnerabilities = [];
169
+ const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
170
+ for (const call of calls) {
171
+ const funcName = parser.getFunctionName(call);
172
+ const receiverName = parser.getReceiverName(call);
173
+ // Check res.send(), res.write(), res.end() with template literals
174
+ if (receiverName === 'res' &&
175
+ funcName &&
176
+ ['send', 'write', 'end', 'render'].includes(funcName)) {
177
+ const args = call.getArguments();
178
+ if (args.length > 0) {
179
+ const firstArg = args[0];
180
+ if (firstArg.getKind() === SyntaxKind.TemplateExpression) {
181
+ vulnerabilities.push({
182
+ id: generateVulnId(),
183
+ type: 'xss',
184
+ severity: 'high',
185
+ cwes: ['CWE-79'],
186
+ owasp: ['A03:2021'],
187
+ location: parser.getLocation(call),
188
+ description: 'Potential XSS: Unescaped output to response',
189
+ recommendation: 'Use HTML escaping or a template engine with auto-escaping',
190
+ confidence: 0.7,
191
+ ruleId: this.ruleId,
192
+ codeSnippet: parser.extractSnippet(call),
193
+ detectedAt: new Date(),
194
+ });
195
+ }
196
+ }
197
+ }
198
+ // Check innerHTML assignment (requires property access analysis)
199
+ const expr = call.getExpression();
200
+ if (expr.getText().includes('innerHTML')) {
201
+ vulnerabilities.push({
202
+ id: generateVulnId(),
203
+ type: 'xss',
204
+ severity: 'high',
205
+ cwes: ['CWE-79'],
206
+ owasp: ['A03:2021'],
207
+ location: parser.getLocation(call),
208
+ description: 'Potential XSS: innerHTML assignment detected',
209
+ recommendation: 'Use textContent or properly sanitize HTML content',
210
+ confidence: 0.8,
211
+ ruleId: this.ruleId,
212
+ codeSnippet: parser.extractSnippet(call),
213
+ detectedAt: new Date(),
214
+ });
215
+ }
216
+ }
217
+ return vulnerabilities;
218
+ },
219
+ };
220
+ /**
221
+ * Eval detector
222
+ */
223
+ const evalDetector = {
224
+ ruleId: 'SEC-005',
225
+ detect(sourceFile, parser) {
226
+ const vulnerabilities = [];
227
+ const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
228
+ for (const call of calls) {
229
+ const funcName = parser.getFunctionName(call);
230
+ if (funcName === 'eval' || funcName === 'Function') {
231
+ vulnerabilities.push({
232
+ id: generateVulnId(),
233
+ type: 'code-injection',
234
+ severity: 'critical',
235
+ cwes: ['CWE-94', 'CWE-95'],
236
+ owasp: ['A03:2021'],
237
+ location: parser.getLocation(call),
238
+ description: `Potential code injection: ${funcName}() usage detected`,
239
+ recommendation: 'Avoid eval() and new Function(). Use safer alternatives.',
240
+ confidence: 0.95,
241
+ ruleId: this.ruleId,
242
+ codeSnippet: parser.extractSnippet(call),
243
+ detectedAt: new Date(),
244
+ });
245
+ }
246
+ }
247
+ return vulnerabilities;
248
+ },
249
+ };
250
+ /**
251
+ * Prototype pollution detector
252
+ */
253
+ const prototypePollutionDetector = {
254
+ ruleId: 'SEC-006',
255
+ detect(sourceFile, parser) {
256
+ const vulnerabilities = [];
257
+ const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
258
+ for (const call of calls) {
259
+ const funcName = parser.getFunctionName(call);
260
+ // Object.assign with user input
261
+ if (funcName === 'assign') {
262
+ const receiverName = parser.getReceiverName(call);
263
+ if (receiverName === 'Object') {
264
+ // Check if first argument is Object.prototype or {}
265
+ vulnerabilities.push({
266
+ id: generateVulnId(),
267
+ type: 'prototype-pollution',
268
+ severity: 'high',
269
+ cwes: ['CWE-1321'],
270
+ owasp: ['A08:2021'],
271
+ location: parser.getLocation(call),
272
+ description: 'Potential prototype pollution: Object.assign() with external input',
273
+ recommendation: 'Validate object keys, use Map instead, or freeze prototype',
274
+ confidence: 0.6,
275
+ ruleId: this.ruleId,
276
+ codeSnippet: parser.extractSnippet(call),
277
+ detectedAt: new Date(),
278
+ });
279
+ }
280
+ }
281
+ }
282
+ // Check for __proto__ access
283
+ const propertyAccess = sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression);
284
+ for (const access of propertyAccess) {
285
+ if (access.getName() === '__proto__') {
286
+ vulnerabilities.push({
287
+ id: generateVulnId(),
288
+ type: 'prototype-pollution',
289
+ severity: 'high',
290
+ cwes: ['CWE-1321'],
291
+ owasp: ['A08:2021'],
292
+ location: parser.getLocation(access),
293
+ description: 'Potential prototype pollution: __proto__ access detected',
294
+ recommendation: 'Avoid __proto__ access, use Object.getPrototypeOf() if needed',
295
+ confidence: 0.85,
296
+ ruleId: this.ruleId,
297
+ codeSnippet: parser.extractSnippet(access),
298
+ detectedAt: new Date(),
299
+ });
300
+ }
301
+ }
302
+ return vulnerabilities;
303
+ },
304
+ };
305
+ /**
306
+ * All built-in detectors
307
+ */
308
+ const DETECTORS = [
309
+ sqlInjectionDetector,
310
+ commandInjectionDetector,
311
+ pathTraversalDetector,
312
+ xssDetector,
313
+ evalDetector,
314
+ prototypePollutionDetector,
315
+ ];
316
+ /**
317
+ * Vulnerability scanner
318
+ */
319
+ export class VulnerabilityScanner {
320
+ parser;
321
+ fileScanner;
322
+ detectors;
323
+ constructor(options) {
324
+ this.parser = getASTParser(options?.tsConfigPath);
325
+ this.fileScanner = createFileScanner();
326
+ this.detectors = [...DETECTORS];
327
+ }
328
+ /**
329
+ * Scan a single file
330
+ */
331
+ scanFile(filePath) {
332
+ const sourceFile = this.parser.parseFile(filePath);
333
+ const vulnerabilities = [];
334
+ for (const detector of this.detectors) {
335
+ const detected = detector.detect(sourceFile, this.parser);
336
+ vulnerabilities.push(...detected);
337
+ }
338
+ return vulnerabilities;
339
+ }
340
+ /**
341
+ * Scan a directory
342
+ */
343
+ async scanDirectory(rootPath, options) {
344
+ const startTime = Date.now();
345
+ const files = await this.fileScanner.scan(rootPath);
346
+ const vulnerabilities = [];
347
+ let scannedFiles = 0;
348
+ let skippedFiles = 0;
349
+ for (const file of files) {
350
+ // Apply exclude patterns
351
+ if (options?.excludePatterns?.some((p) => file.relativePath.includes(p))) {
352
+ skippedFiles++;
353
+ continue;
354
+ }
355
+ // Apply max file size
356
+ if (options?.maxFileSize && file.size > options.maxFileSize) {
357
+ skippedFiles++;
358
+ continue;
359
+ }
360
+ try {
361
+ const fileVulns = this.scanFile(file.path);
362
+ // Apply severity filter
363
+ const filtered = options?.severityFilter
364
+ ? fileVulns.filter((v) => options.severityFilter.includes(v.severity))
365
+ : fileVulns;
366
+ vulnerabilities.push(...filtered);
367
+ scannedFiles++;
368
+ }
369
+ catch (error) {
370
+ console.warn(`Warning: Failed to scan ${file.path}: ${error}`);
371
+ skippedFiles++;
372
+ }
373
+ }
374
+ const duration = Date.now() - startTime;
375
+ return {
376
+ vulnerabilities,
377
+ scannedFiles,
378
+ skippedFiles,
379
+ duration,
380
+ timestamp: new Date(),
381
+ options: options ?? {},
382
+ summary: {
383
+ critical: vulnerabilities.filter((v) => v.severity === 'critical').length,
384
+ high: vulnerabilities.filter((v) => v.severity === 'high').length,
385
+ medium: vulnerabilities.filter((v) => v.severity === 'medium').length,
386
+ low: vulnerabilities.filter((v) => v.severity === 'low').length,
387
+ info: vulnerabilities.filter((v) => v.severity === 'info').length,
388
+ total: vulnerabilities.length,
389
+ },
390
+ };
391
+ }
392
+ /**
393
+ * Add a custom detector
394
+ */
395
+ addDetector(detector) {
396
+ this.detectors.push(detector);
397
+ }
398
+ /**
399
+ * Get list of rule IDs
400
+ */
401
+ getRuleIds() {
402
+ return this.detectors.map((d) => d.ruleId);
403
+ }
404
+ /**
405
+ * Get number of rules
406
+ */
407
+ getRuleCount() {
408
+ return this.detectors.length;
409
+ }
410
+ }
411
+ /**
412
+ * Create a vulnerability scanner
413
+ */
414
+ export function createVulnerabilityScanner(options) {
415
+ return new VulnerabilityScanner(options);
416
+ }
417
+ //# sourceMappingURL=vulnerability-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vulnerability-scanner.js","sourceRoot":"","sources":["../../src/analysis/vulnerability-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Security CLI commands
3
+ * @module @nahisaho/musubix-security/cli
4
+ * @trace REQ-SEC-CLI-001
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Create security CLI command
9
+ */
10
+ export declare function createSecurityCLI(): Command;
11
+ /**
12
+ * Run CLI
13
+ */
14
+ export declare function runCLI(args?: string[]): Promise<void>;
15
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgKpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAsR3C;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE"}