avana-cli 2.11.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 (100) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +21 -0
  3. package/README.md +584 -0
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +153 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/install.d.ts +6 -0
  9. package/dist/commands/install.d.ts.map +1 -0
  10. package/dist/commands/install.js +101 -0
  11. package/dist/commands/install.js.map +1 -0
  12. package/dist/commands/scan.d.ts +19 -0
  13. package/dist/commands/scan.d.ts.map +1 -0
  14. package/dist/commands/scan.js +383 -0
  15. package/dist/commands/scan.js.map +1 -0
  16. package/dist/commands/uninstall.d.ts +6 -0
  17. package/dist/commands/uninstall.d.ts.map +1 -0
  18. package/dist/commands/uninstall.js +80 -0
  19. package/dist/commands/uninstall.js.map +1 -0
  20. package/dist/index.d.ts +97 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +475 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/rules/additional-patterns.d.ts +12 -0
  25. package/dist/rules/additional-patterns.d.ts.map +1 -0
  26. package/dist/rules/additional-patterns.js +170 -0
  27. package/dist/rules/additional-patterns.js.map +1 -0
  28. package/dist/rules/code-patterns.d.ts +26 -0
  29. package/dist/rules/code-patterns.d.ts.map +1 -0
  30. package/dist/rules/code-patterns.js +220 -0
  31. package/dist/rules/code-patterns.js.map +1 -0
  32. package/dist/rules/secret-patterns.d.ts +28 -0
  33. package/dist/rules/secret-patterns.d.ts.map +1 -0
  34. package/dist/rules/secret-patterns.js +1729 -0
  35. package/dist/rules/secret-patterns.js.map +1 -0
  36. package/dist/scanners/secret-scanner.d.ts +34 -0
  37. package/dist/scanners/secret-scanner.d.ts.map +1 -0
  38. package/dist/scanners/secret-scanner.js +281 -0
  39. package/dist/scanners/secret-scanner.js.map +1 -0
  40. package/dist/types/index.d.ts +116 -0
  41. package/dist/types/index.d.ts.map +1 -0
  42. package/dist/types/index.js +7 -0
  43. package/dist/types/index.js.map +1 -0
  44. package/dist/utils/error-handler.d.ts +126 -0
  45. package/dist/utils/error-handler.d.ts.map +1 -0
  46. package/dist/utils/error-handler.js +222 -0
  47. package/dist/utils/error-handler.js.map +1 -0
  48. package/dist/utils/exit-codes.d.ts +52 -0
  49. package/dist/utils/exit-codes.d.ts.map +1 -0
  50. package/dist/utils/exit-codes.js +89 -0
  51. package/dist/utils/exit-codes.js.map +1 -0
  52. package/dist/utils/file-stream-scanner.d.ts +31 -0
  53. package/dist/utils/file-stream-scanner.d.ts.map +1 -0
  54. package/dist/utils/file-stream-scanner.js +159 -0
  55. package/dist/utils/file-stream-scanner.js.map +1 -0
  56. package/dist/utils/file-type-detector.d.ts +45 -0
  57. package/dist/utils/file-type-detector.d.ts.map +1 -0
  58. package/dist/utils/file-type-detector.js +237 -0
  59. package/dist/utils/file-type-detector.js.map +1 -0
  60. package/dist/utils/ignore-pattern-manager.d.ts +61 -0
  61. package/dist/utils/ignore-pattern-manager.d.ts.map +1 -0
  62. package/dist/utils/ignore-pattern-manager.js +204 -0
  63. package/dist/utils/ignore-pattern-manager.js.map +1 -0
  64. package/dist/utils/json-output-formatter.d.ts +232 -0
  65. package/dist/utils/json-output-formatter.d.ts.map +1 -0
  66. package/dist/utils/json-output-formatter.js +367 -0
  67. package/dist/utils/json-output-formatter.js.map +1 -0
  68. package/dist/utils/logger.d.ts +181 -0
  69. package/dist/utils/logger.d.ts.map +1 -0
  70. package/dist/utils/logger.js +414 -0
  71. package/dist/utils/logger.js.map +1 -0
  72. package/dist/utils/markdown-output-formatter.d.ts +65 -0
  73. package/dist/utils/markdown-output-formatter.d.ts.map +1 -0
  74. package/dist/utils/markdown-output-formatter.js +316 -0
  75. package/dist/utils/markdown-output-formatter.js.map +1 -0
  76. package/dist/utils/memory-manager.d.ts +77 -0
  77. package/dist/utils/memory-manager.d.ts.map +1 -0
  78. package/dist/utils/memory-manager.js +157 -0
  79. package/dist/utils/memory-manager.js.map +1 -0
  80. package/dist/utils/parallel-scanner-worker.d.ts +19 -0
  81. package/dist/utils/parallel-scanner-worker.d.ts.map +1 -0
  82. package/dist/utils/parallel-scanner-worker.js +51 -0
  83. package/dist/utils/parallel-scanner-worker.js.map +1 -0
  84. package/dist/utils/parallel-scanner.d.ts +82 -0
  85. package/dist/utils/parallel-scanner.d.ts.map +1 -0
  86. package/dist/utils/parallel-scanner.js +229 -0
  87. package/dist/utils/parallel-scanner.js.map +1 -0
  88. package/dist/utils/pattern-validator.d.ts +108 -0
  89. package/dist/utils/pattern-validator.d.ts.map +1 -0
  90. package/dist/utils/pattern-validator.js +315 -0
  91. package/dist/utils/pattern-validator.js.map +1 -0
  92. package/dist/utils/progress-reporter.d.ts +68 -0
  93. package/dist/utils/progress-reporter.d.ts.map +1 -0
  94. package/dist/utils/progress-reporter.js +194 -0
  95. package/dist/utils/progress-reporter.js.map +1 -0
  96. package/dist/utils/result-cache.d.ts +99 -0
  97. package/dist/utils/result-cache.d.ts.map +1 -0
  98. package/dist/utils/result-cache.js +335 -0
  99. package/dist/utils/result-cache.js.map +1 -0
  100. package/package.json +80 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Parallel Scanner
3
+ * Distributes file scanning across multiple worker threads for improved performance
4
+ */
5
+ export interface ScanResult {
6
+ file: string;
7
+ issues: any[];
8
+ error?: string;
9
+ }
10
+ export interface WorkerMessage {
11
+ type: 'result' | 'error' | 'complete';
12
+ data?: ScanResult;
13
+ error?: string;
14
+ }
15
+ export interface ParallelScanOptions {
16
+ workerCount?: number;
17
+ patterns?: any[];
18
+ ignorePatterns?: string[];
19
+ }
20
+ export declare class ParallelScanner {
21
+ private readonly workerCount;
22
+ private workers;
23
+ private activeWorkers;
24
+ private completedFiles;
25
+ private totalFiles;
26
+ private results;
27
+ private errors;
28
+ constructor(options?: ParallelScanOptions);
29
+ /**
30
+ * Scan files in parallel using worker threads
31
+ */
32
+ scanFiles(files: string[], patterns: any[], ignorePatterns?: string[]): Promise<ScanResult[]>;
33
+ /**
34
+ * Distribute files evenly across workers
35
+ */
36
+ private distributeFiles;
37
+ /**
38
+ * Create and manage a worker thread
39
+ */
40
+ private createWorker;
41
+ /**
42
+ * Handle messages from worker threads
43
+ */
44
+ private handleWorkerMessage;
45
+ /**
46
+ * Get scan progress (0-1)
47
+ */
48
+ getProgress(): number;
49
+ /**
50
+ * Get scan statistics
51
+ */
52
+ getStats(): {
53
+ totalFiles: number;
54
+ completedFiles: number;
55
+ activeWorkers: number;
56
+ workerCount: number;
57
+ errors: number;
58
+ results: number;
59
+ };
60
+ /**
61
+ * Terminate all workers
62
+ */
63
+ terminate(): Promise<void>;
64
+ /**
65
+ * Check if parallel scanning is supported
66
+ */
67
+ static isSupported(): boolean;
68
+ /**
69
+ * Get optimal worker count for the current system
70
+ */
71
+ static getOptimalWorkerCount(): number;
72
+ }
73
+ export declare let parallelScanner: ParallelScanner | null;
74
+ /**
75
+ * Initialize global parallel scanner
76
+ */
77
+ export declare function initializeParallelScanner(options?: ParallelScanOptions): ParallelScanner;
78
+ /**
79
+ * Get the global parallel scanner instance
80
+ */
81
+ export declare function getParallelScanner(): ParallelScanner | null;
82
+ //# sourceMappingURL=parallel-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-scanner.d.ts","sourceRoot":"","sources":["../../src/utils/parallel-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IACtC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,GAAE,mBAAwB;IAK7C;;OAEG;IACU,SAAS,CACpB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,GAAG,EAAE,EACf,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,UAAU,EAAE,CAAC;IAgCxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;YACW,YAAY;IAmD1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACI,WAAW,IAAI,MAAM;IAK5B;;OAEG;IACI,QAAQ;;;;;;;;IAWf;;OAEG;IACU,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvC;;OAEG;WACW,WAAW,IAAI,OAAO;IAUpC;;OAEG;WACW,qBAAqB,IAAI,MAAM;CAG9C;AAGD,eAAO,IAAI,eAAe,EAAE,eAAe,GAAG,IAAW,CAAC;AAE1D;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAGxF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAE3D"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ /**
3
+ * Parallel Scanner
4
+ * Distributes file scanning across multiple worker threads for improved performance
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.parallelScanner = exports.ParallelScanner = void 0;
41
+ exports.initializeParallelScanner = initializeParallelScanner;
42
+ exports.getParallelScanner = getParallelScanner;
43
+ const worker_threads_1 = require("worker_threads");
44
+ const os = __importStar(require("os"));
45
+ const path = __importStar(require("path"));
46
+ class ParallelScanner {
47
+ workerCount;
48
+ workers = [];
49
+ activeWorkers = 0;
50
+ completedFiles = 0;
51
+ totalFiles = 0;
52
+ results = [];
53
+ errors = [];
54
+ constructor(options = {}) {
55
+ // Default to CPU count - 1, but at least 1 worker
56
+ this.workerCount = options.workerCount || Math.max(1, os.cpus().length - 1);
57
+ }
58
+ /**
59
+ * Scan files in parallel using worker threads
60
+ */
61
+ async scanFiles(files, patterns, ignorePatterns = []) {
62
+ if (files.length === 0) {
63
+ return [];
64
+ }
65
+ this.totalFiles = files.length;
66
+ this.completedFiles = 0;
67
+ this.results = [];
68
+ this.errors = [];
69
+ // Distribute files evenly across workers
70
+ const fileChunks = this.distributeFiles(files);
71
+ const actualWorkerCount = Math.min(this.workerCount, fileChunks.length);
72
+ // Create workers
73
+ const workerPromises = [];
74
+ for (let i = 0; i < actualWorkerCount; i++) {
75
+ if (fileChunks[i] && fileChunks[i].length > 0) {
76
+ const workerPromise = this.createWorker(fileChunks[i], patterns, ignorePatterns);
77
+ workerPromises.push(workerPromise);
78
+ }
79
+ }
80
+ // Wait for all workers to complete
81
+ await Promise.all(workerPromises);
82
+ // Sort results by file path for consistent output
83
+ this.results.sort((a, b) => a.file.localeCompare(b.file));
84
+ return this.results;
85
+ }
86
+ /**
87
+ * Distribute files evenly across workers
88
+ */
89
+ distributeFiles(files) {
90
+ const chunks = [];
91
+ const chunkSize = Math.ceil(files.length / this.workerCount);
92
+ for (let i = 0; i < files.length; i += chunkSize) {
93
+ chunks.push(files.slice(i, i + chunkSize));
94
+ }
95
+ return chunks;
96
+ }
97
+ /**
98
+ * Create and manage a worker thread
99
+ */
100
+ async createWorker(files, patterns, ignorePatterns) {
101
+ return new Promise((resolve, reject) => {
102
+ // Get the worker script path - handle both src and dist directories
103
+ let workerScript;
104
+ // Check if we're running from dist (compiled) or src (tests)
105
+ if (__dirname.includes('dist')) {
106
+ workerScript = path.join(__dirname, 'parallel-scanner-worker.js');
107
+ }
108
+ else {
109
+ // Running from src directory (during tests), use the compiled version
110
+ workerScript = path.join(__dirname, '../../dist/utils/parallel-scanner-worker.js');
111
+ }
112
+ const worker = new worker_threads_1.Worker(workerScript, {
113
+ workerData: {
114
+ files,
115
+ patterns,
116
+ ignorePatterns
117
+ }
118
+ });
119
+ this.workers.push(worker);
120
+ this.activeWorkers++;
121
+ worker.on('message', (message) => {
122
+ this.handleWorkerMessage(message);
123
+ });
124
+ worker.on('error', (error) => {
125
+ this.errors.push(`Worker error: ${error.message}`);
126
+ this.activeWorkers--;
127
+ reject(error);
128
+ });
129
+ worker.on('exit', (code) => {
130
+ this.activeWorkers--;
131
+ if (code !== 0) {
132
+ const error = new Error(`Worker stopped with exit code ${code}`);
133
+ this.errors.push(error.message);
134
+ reject(error);
135
+ }
136
+ else {
137
+ resolve();
138
+ }
139
+ });
140
+ });
141
+ }
142
+ /**
143
+ * Handle messages from worker threads
144
+ */
145
+ handleWorkerMessage(message) {
146
+ switch (message.type) {
147
+ case 'result':
148
+ if (message.data) {
149
+ this.results.push(message.data);
150
+ this.completedFiles++;
151
+ }
152
+ break;
153
+ case 'error':
154
+ if (message.error) {
155
+ this.errors.push(message.error);
156
+ }
157
+ break;
158
+ case 'complete':
159
+ // Worker has finished processing all its files
160
+ break;
161
+ }
162
+ }
163
+ /**
164
+ * Get scan progress (0-1)
165
+ */
166
+ getProgress() {
167
+ if (this.totalFiles === 0)
168
+ return 1;
169
+ return this.completedFiles / this.totalFiles;
170
+ }
171
+ /**
172
+ * Get scan statistics
173
+ */
174
+ getStats() {
175
+ return {
176
+ totalFiles: this.totalFiles,
177
+ completedFiles: this.completedFiles,
178
+ activeWorkers: this.activeWorkers,
179
+ workerCount: this.workerCount,
180
+ errors: this.errors.length,
181
+ results: this.results.length
182
+ };
183
+ }
184
+ /**
185
+ * Terminate all workers
186
+ */
187
+ async terminate() {
188
+ const terminationPromises = this.workers.map(worker => worker.terminate());
189
+ await Promise.all(terminationPromises);
190
+ this.workers = [];
191
+ this.activeWorkers = 0;
192
+ }
193
+ /**
194
+ * Check if parallel scanning is supported
195
+ */
196
+ static isSupported() {
197
+ try {
198
+ // Check if worker_threads is available
199
+ require('worker_threads');
200
+ return true;
201
+ }
202
+ catch (error) {
203
+ return false;
204
+ }
205
+ }
206
+ /**
207
+ * Get optimal worker count for the current system
208
+ */
209
+ static getOptimalWorkerCount() {
210
+ return Math.max(1, os.cpus().length - 1);
211
+ }
212
+ }
213
+ exports.ParallelScanner = ParallelScanner;
214
+ // Global parallel scanner instance
215
+ exports.parallelScanner = null;
216
+ /**
217
+ * Initialize global parallel scanner
218
+ */
219
+ function initializeParallelScanner(options) {
220
+ exports.parallelScanner = new ParallelScanner(options);
221
+ return exports.parallelScanner;
222
+ }
223
+ /**
224
+ * Get the global parallel scanner instance
225
+ */
226
+ function getParallelScanner() {
227
+ return exports.parallelScanner;
228
+ }
229
+ //# sourceMappingURL=parallel-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-scanner.js","sourceRoot":"","sources":["../../src/utils/parallel-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Pattern Validator
3
+ * Validates and tests all detection patterns for correctness and performance
4
+ */
5
+ /**
6
+ * Validation result for a pattern
7
+ */
8
+ export interface ValidationResult {
9
+ isValid: boolean;
10
+ errors: string[];
11
+ warnings: string[];
12
+ compilationTime?: number;
13
+ testResults?: TestResult[];
14
+ }
15
+ /**
16
+ * Test case for pattern validation
17
+ */
18
+ export interface TestCase {
19
+ input: string;
20
+ shouldMatch: boolean;
21
+ description: string;
22
+ expectedMatch?: string;
23
+ }
24
+ /**
25
+ * Result of running test cases against a pattern
26
+ */
27
+ export interface TestResult {
28
+ testCase: TestCase;
29
+ passed: boolean;
30
+ actualMatch: string | null;
31
+ error?: string;
32
+ }
33
+ /**
34
+ * Pattern definition for validation
35
+ */
36
+ export interface SecretPattern {
37
+ id: string;
38
+ name: string;
39
+ pattern: string | RegExp;
40
+ description?: string;
41
+ testCases?: TestCase[];
42
+ severity?: 'critical' | 'high' | 'medium' | 'low';
43
+ }
44
+ /**
45
+ * Backtracking detection result
46
+ */
47
+ export interface BacktrackingResult {
48
+ hasBacktracking: boolean;
49
+ executionTime: number;
50
+ timedOut: boolean;
51
+ testInput?: string;
52
+ }
53
+ /**
54
+ * Pattern Validator class
55
+ * Validates regex patterns for correctness, performance, and security
56
+ */
57
+ export declare class PatternValidator {
58
+ private debugMode;
59
+ private backtrackingTimeout;
60
+ constructor(debugMode?: boolean, backtrackingTimeout?: number);
61
+ /**
62
+ * Validate a pattern for correctness and compilation
63
+ */
64
+ validatePattern(pattern: SecretPattern): ValidationResult;
65
+ /**
66
+ * Test a pattern against positive and negative test cases
67
+ */
68
+ testPattern(pattern: SecretPattern, testCases: TestCase[]): {
69
+ results: TestResult[];
70
+ allPassed: boolean;
71
+ passedCount: number;
72
+ failedCount: number;
73
+ };
74
+ /**
75
+ * Check if a pattern has catastrophic backtracking
76
+ */
77
+ checkBacktracking(pattern: RegExp): BacktrackingResult;
78
+ /**
79
+ * Compile a pattern from string or RegExp
80
+ */
81
+ private compilePattern;
82
+ /**
83
+ * Run a single test case against a regex
84
+ */
85
+ private runTestCase;
86
+ /**
87
+ * Test pattern performance to detect backtracking
88
+ */
89
+ private testPatternPerformance;
90
+ /**
91
+ * Validate pattern structure and provide warnings
92
+ */
93
+ private validatePatternStructure;
94
+ /**
95
+ * Validate all patterns in a collection
96
+ */
97
+ validateAllPatterns(patterns: SecretPattern[]): {
98
+ results: Map<string, ValidationResult>;
99
+ validCount: number;
100
+ invalidCount: number;
101
+ warningCount: number;
102
+ };
103
+ /**
104
+ * Generate test cases for common secret patterns
105
+ */
106
+ generateTestCases(patternType: string): TestCase[];
107
+ }
108
+ //# sourceMappingURL=pattern-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-validator.d.ts","sourceRoot":"","sources":["../../src/utils/pattern-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,mBAAmB,CAAgB;gBAE/B,SAAS,GAAE,OAAe,EAAE,mBAAmB,GAAE,MAAa;IAK1E;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB;IAkDhE;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG;QACjE,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB;IAuCD;;OAEG;IACI,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB;IA+B7D;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsCnB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuC9B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2ChC;;OAEG;IACI,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG;QACrD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACvC,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB;IAuCD;;OAEG;IACI,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE;CA6C1D"}