mcp-adr-analysis-server 2.0.6 → 2.0.8

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 (29) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +70 -0
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/tools/smart-git-push-tool.d.ts +24 -0
  6. package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -0
  7. package/dist/src/tools/smart-git-push-tool.js +480 -0
  8. package/dist/src/tools/smart-git-push-tool.js.map +1 -0
  9. package/dist/src/utils/enhanced-sensitive-detector.d.ts +61 -0
  10. package/dist/src/utils/enhanced-sensitive-detector.d.ts.map +1 -0
  11. package/dist/src/utils/enhanced-sensitive-detector.js +437 -0
  12. package/dist/src/utils/enhanced-sensitive-detector.js.map +1 -0
  13. package/dist/src/utils/interactive-approval.d.ts +63 -0
  14. package/dist/src/utils/interactive-approval.d.ts.map +1 -0
  15. package/dist/src/utils/interactive-approval.js +441 -0
  16. package/dist/src/utils/interactive-approval.js.map +1 -0
  17. package/dist/src/utils/llm-artifact-detector.d.ts +76 -0
  18. package/dist/src/utils/llm-artifact-detector.d.ts.map +1 -0
  19. package/dist/src/utils/llm-artifact-detector.js +422 -0
  20. package/dist/src/utils/llm-artifact-detector.js.map +1 -0
  21. package/dist/src/utils/location-filter.d.ts +79 -0
  22. package/dist/src/utils/location-filter.d.ts.map +1 -0
  23. package/dist/src/utils/location-filter.js +327 -0
  24. package/dist/src/utils/location-filter.js.map +1 -0
  25. package/dist/src/utils/release-readiness-detector.d.ts +47 -0
  26. package/dist/src/utils/release-readiness-detector.d.ts.map +1 -0
  27. package/dist/src/utils/release-readiness-detector.js +413 -0
  28. package/dist/src/utils/release-readiness-detector.js.map +1 -0
  29. package/package.json +1 -1
@@ -0,0 +1,480 @@
1
+ /**
2
+ * Smart Git Push MCP Tool
3
+ *
4
+ * Intelligent git push with sensitive content and LLM artifact filtering
5
+ * Leverages existing content security tools and git CLI integration
6
+ */
7
+ import { McpAdrError } from '../types/index.js';
8
+ import { execSync } from 'child_process';
9
+ import { readFileSync, existsSync, statSync } from 'fs';
10
+ import { join, basename } from 'path';
11
+ /**
12
+ * Main smart git push function - MCP Safe Version
13
+ */
14
+ export async function smartGitPush(args) {
15
+ const { branch, message, skipValidation = false, allowedArtifacts = [], sensitivityLevel = 'moderate', dryRun = false, projectPath = process.cwd(), checkReleaseReadiness = false, releaseType = 'minor' } = args;
16
+ try {
17
+ // Step 1: Check release readiness if requested
18
+ let releaseReadinessResult = null;
19
+ if (checkReleaseReadiness) {
20
+ try {
21
+ const { analyzeReleaseReadiness } = await import('../utils/release-readiness-detector.js');
22
+ releaseReadinessResult = await analyzeReleaseReadiness({
23
+ projectPath,
24
+ releaseType,
25
+ includeAnalysis: true
26
+ });
27
+ }
28
+ catch (error) {
29
+ console.error('Release readiness analysis failed:', error);
30
+ }
31
+ }
32
+ // Step 2: Get staged files using git CLI
33
+ const stagedFiles = await getStagedFiles(projectPath);
34
+ if (stagedFiles.length === 0) {
35
+ let responseText = `# Smart Git Push - No Changes
36
+
37
+ ## Status
38
+ No staged files found. Use \`git add\` to stage files before pushing.
39
+
40
+ ## Available Commands
41
+ - \`git add .\` - Stage all changes
42
+ - \`git add <file>\` - Stage specific file
43
+ - \`git status\` - Check current status
44
+ `;
45
+ // Add release readiness info if checked
46
+ if (releaseReadinessResult) {
47
+ responseText += `
48
+
49
+ ## Release Readiness Analysis
50
+ ${releaseReadinessResult.summary}
51
+
52
+ ### Recommendations
53
+ ${releaseReadinessResult.recommendations.map(r => `- ${r}`).join('\n')}
54
+
55
+ ${releaseReadinessResult.isReady ?
56
+ '✅ **Project is ready for release!** Consider creating a release after staging files.' :
57
+ '❌ **Project is not ready for release.** Address blockers before proceeding.'}
58
+ `;
59
+ }
60
+ return {
61
+ content: [{
62
+ type: 'text',
63
+ text: responseText
64
+ }]
65
+ };
66
+ }
67
+ // Step 3: Analyze staged files if validation is enabled
68
+ let validationResults = [];
69
+ if (!skipValidation) {
70
+ validationResults = await validateStagedFiles(stagedFiles, {
71
+ sensitivityLevel,
72
+ allowedArtifacts,
73
+ projectPath
74
+ });
75
+ }
76
+ // Step 4: Check for blocking conditions (MCP Safe - No Interactive Mode)
77
+ const issues = validationResults.filter(r => r.issues.length > 0);
78
+ // Check if release readiness should block push
79
+ let releaseReadinessBlocked = false;
80
+ if (releaseReadinessResult && !releaseReadinessResult.isReady) {
81
+ const criticalBlockers = releaseReadinessResult.blockers.filter(b => b.severity === 'error');
82
+ if (criticalBlockers.length > 0) {
83
+ releaseReadinessBlocked = true;
84
+ }
85
+ }
86
+ // Check for blocking conditions
87
+ const hasBlockingErrors = issues.some(issue => issue.issues.some(i => i.severity === 'error'));
88
+ const shouldBlock = hasBlockingErrors || releaseReadinessBlocked;
89
+ if (shouldBlock && !dryRun) {
90
+ let cancelText = `# Smart Git Push - Blocked
91
+
92
+ ## Validation Issues
93
+ Push blocked due to critical issues that must be resolved.
94
+
95
+ ## Issues Found
96
+ ${issues.map(issue => `
97
+
98
+ ### ${issue.file}
99
+ ${issue.issues.map(i => `- **${i.severity.toUpperCase()}**: ${i.message}`).join('\n')}
100
+
101
+ **Suggestions:**
102
+ ${issue.suggestions.map(s => `- ${s}`).join('\n')}
103
+ `).join('\n')}
104
+ `;
105
+ // Add release readiness info if checked and blocked
106
+ if (releaseReadinessResult && releaseReadinessBlocked) {
107
+ cancelText += `
108
+
109
+ ## Release Readiness Issues
110
+ ${releaseReadinessResult.summary}
111
+
112
+ ### Critical Blockers
113
+ ${releaseReadinessResult.blockers.filter(b => b.severity === 'error').map(b => `- **${b.type}**: ${b.message}`).join('\n')}
114
+
115
+ ### Recommendations
116
+ ${releaseReadinessResult.recommendations.map(r => `- ${r}`).join('\n')}
117
+ `;
118
+ }
119
+ return {
120
+ content: [{
121
+ type: 'text',
122
+ text: cancelText
123
+ }]
124
+ };
125
+ }
126
+ // Step 5: Execute git push if not dry run
127
+ if (!dryRun) {
128
+ const pushResult = await executePush(projectPath, branch, message);
129
+ let successText = `# Smart Git Push - Success ✅
130
+
131
+ ## Push Details
132
+ - **Branch**: ${branch || 'current'}
133
+ - **Files**: ${stagedFiles.length} staged files
134
+ - **Validation**: ${skipValidation ? 'Skipped' : 'Completed'}
135
+ - **Issues Found**: ${issues.length}
136
+ - **Sensitivity Level**: ${sensitivityLevel}
137
+ ${checkReleaseReadiness ? `- **Release Readiness**: ${releaseReadinessResult?.isReady ? '✅ Ready' : '❌ Not Ready'}` : ''}
138
+
139
+ ## Files Pushed
140
+ ${stagedFiles.map(f => `- ${f.path} (${f.status})`).join('\n')}
141
+
142
+ ${issues.length > 0 ? `
143
+
144
+ ## Validation Issues (Auto-Approved)
145
+ ${issues.map(issue => `
146
+
147
+ ### ${issue.file}
148
+ ${issue.issues.map(i => `- **${i.severity.toUpperCase()}**: ${i.message}`).join('\n')}
149
+ `).join('\n')}
150
+ ` : ''}
151
+
152
+ ${releaseReadinessResult ? `
153
+
154
+ ## Release Readiness Analysis
155
+ ${releaseReadinessResult.summary}
156
+
157
+ ### Post-Push Recommendations
158
+ ${releaseReadinessResult.recommendations.map(r => `- ${r}`).join('\n')}
159
+
160
+ ${releaseReadinessResult.isReady ?
161
+ '🎉 **Congratulations!** This push completed a release-ready state. Consider creating a release tag.' :
162
+ '📋 **Next Steps**: Address remaining blockers to achieve release readiness.'}
163
+ ` : ''}
164
+
165
+ ## Git Output
166
+ \`\`\`
167
+ ${pushResult.output}
168
+ \`\`\`
169
+
170
+ ## Next Steps
171
+ - Monitor CI/CD pipeline for build status
172
+ - Review any deployment processes
173
+ - Check for any post-push hooks or workflows
174
+ ${releaseReadinessResult?.isReady ? '- Consider creating a release tag or publishing' : ''}
175
+ `;
176
+ return {
177
+ content: [{
178
+ type: 'text',
179
+ text: successText
180
+ }]
181
+ };
182
+ }
183
+ else {
184
+ // Dry run - show what would happen
185
+ let dryRunText = `# Smart Git Push - Dry Run 🔍
186
+
187
+ ## Analysis Complete
188
+ - **Files to Push**: ${stagedFiles.length}
189
+ - **Validation Issues**: ${issues.length}
190
+ - **Sensitivity Level**: ${sensitivityLevel}
191
+ - **Would Push to**: ${branch || 'current branch'}
192
+ ${checkReleaseReadiness ? `- **Release Readiness**: ${releaseReadinessResult?.isReady ? '✅ Ready' : '❌ Not Ready'}` : ''}
193
+
194
+ ## Staged Files
195
+ ${stagedFiles.map(f => `- ${f.path} (${f.status}) - ${f.size} bytes`).join('\n')}
196
+
197
+ ${issues.length > 0 ? `
198
+
199
+ ## Validation Issues Found
200
+ ${issues.map(issue => `
201
+
202
+ ### ${issue.file}
203
+ ${issue.issues.map(i => `- **${i.severity.toUpperCase()}**: ${i.message}`).join('\n')}
204
+
205
+ **Suggestions:**
206
+ ${issue.suggestions.map(s => `- ${s}`).join('\n')}
207
+ `).join('\n')}
208
+ ` : '## ✅ No Validation Issues Found'}
209
+
210
+ ${releaseReadinessResult ? `
211
+
212
+ ## Release Readiness Analysis
213
+ ${releaseReadinessResult.summary}
214
+
215
+ ### Pre-Push Recommendations
216
+ ${releaseReadinessResult.recommendations.map(r => `- ${r}`).join('\n')}
217
+
218
+ ${releaseReadinessResult.isReady ?
219
+ '🎉 **Ready for Release!** This push would complete all release requirements.' :
220
+ '📋 **Release Blockers**: Address these issues before considering this a release.'}
221
+ ` : ''}
222
+
223
+ ## Command to Execute
224
+ \`\`\`bash
225
+ # Run without dry run to actually push
226
+ git push${branch ? ` origin ${branch}` : ''}
227
+ \`\`\`
228
+
229
+ **Note:** This was a dry run. No files were actually pushed.
230
+ `;
231
+ return {
232
+ content: [{
233
+ type: 'text',
234
+ text: dryRunText
235
+ }]
236
+ };
237
+ }
238
+ }
239
+ catch (error) {
240
+ throw new McpAdrError(`Smart git push failed: ${error instanceof Error ? error.message : String(error)}`, 'GIT_PUSH_ERROR');
241
+ }
242
+ }
243
+ /**
244
+ * Get staged files using git CLI
245
+ */
246
+ async function getStagedFiles(projectPath) {
247
+ try {
248
+ // Get staged files with status
249
+ const gitOutput = execSync('git diff --cached --name-status', {
250
+ cwd: projectPath,
251
+ encoding: 'utf8'
252
+ });
253
+ if (!gitOutput.trim()) {
254
+ return [];
255
+ }
256
+ const files = [];
257
+ const lines = gitOutput.trim().split('\n');
258
+ for (const line of lines) {
259
+ const [status, ...pathParts] = line.split('\t');
260
+ const path = pathParts.join('\t'); // Handle filenames with tabs
261
+ const fullPath = join(projectPath, path);
262
+ let content;
263
+ let size = 0;
264
+ // Read file content if it exists (not for deleted files)
265
+ if (status !== 'D' && existsSync(fullPath)) {
266
+ try {
267
+ const stats = statSync(fullPath);
268
+ size = stats.size;
269
+ // Only read content for small files (< 100KB)
270
+ if (size < 100 * 1024) {
271
+ content = readFileSync(fullPath, 'utf8');
272
+ }
273
+ }
274
+ catch (err) {
275
+ console.error(`Warning: Could not read file ${path}:`, err);
276
+ }
277
+ }
278
+ files.push({
279
+ path,
280
+ status: mapGitStatus(status || 'M'),
281
+ content: content || '',
282
+ size
283
+ });
284
+ }
285
+ return files;
286
+ }
287
+ catch (error) {
288
+ throw new McpAdrError(`Failed to get staged files: ${error instanceof Error ? error.message : String(error)}`, 'GIT_STATUS_ERROR');
289
+ }
290
+ }
291
+ /**
292
+ * Map git status codes to readable names
293
+ */
294
+ function mapGitStatus(status) {
295
+ switch (status) {
296
+ case 'A': return 'added';
297
+ case 'M': return 'modified';
298
+ case 'D': return 'deleted';
299
+ case 'R': return 'renamed';
300
+ default: return 'modified';
301
+ }
302
+ }
303
+ /**
304
+ * Validate staged files for issues
305
+ */
306
+ async function validateStagedFiles(files, options) {
307
+ const results = [];
308
+ for (const file of files) {
309
+ const issues = [];
310
+ const suggestions = [];
311
+ // Skip validation for deleted files
312
+ if (file.status === 'deleted') {
313
+ results.push({ file: file.path, issues, suggestions, approved: true });
314
+ continue;
315
+ }
316
+ // 1. Check for sensitive content
317
+ if (file.content) {
318
+ const sensitiveIssues = await checkSensitiveContent(file.content, file.path);
319
+ issues.push(...sensitiveIssues);
320
+ }
321
+ // 2. Check for LLM artifacts
322
+ const llmIssues = await checkLLMArtifacts(file.path, file.content);
323
+ issues.push(...llmIssues);
324
+ // 3. Check location rules
325
+ const locationIssues = await checkLocationRules(file.path, options.allowedArtifacts);
326
+ issues.push(...locationIssues);
327
+ // 4. Generate suggestions
328
+ const fileSuggestions = generateSuggestions(file.path, issues);
329
+ suggestions.push(...fileSuggestions);
330
+ results.push({
331
+ file: file.path,
332
+ issues,
333
+ suggestions,
334
+ approved: issues.length === 0 || issues.every(i => i.severity === 'info')
335
+ });
336
+ }
337
+ return results;
338
+ }
339
+ /**
340
+ * Check for sensitive content using enhanced sensitive detector
341
+ */
342
+ async function checkSensitiveContent(content, filePath) {
343
+ try {
344
+ // Use enhanced sensitive detector
345
+ const { analyzeSensitiveContent } = await import('../utils/enhanced-sensitive-detector.js');
346
+ const result = await analyzeSensitiveContent(filePath, content);
347
+ // Convert to ValidationIssue format
348
+ const issues = [];
349
+ for (const match of result.matches) {
350
+ issues.push({
351
+ type: 'sensitive-content',
352
+ severity: match.pattern.severity === 'critical' ? 'error' :
353
+ match.pattern.severity === 'high' ? 'error' :
354
+ match.pattern.severity === 'medium' ? 'warning' : 'info',
355
+ message: `${match.pattern.description}: ${match.match}`,
356
+ pattern: match.pattern.name,
357
+ line: match.line
358
+ });
359
+ }
360
+ return issues;
361
+ }
362
+ catch (error) {
363
+ console.error('Sensitive content check failed:', error);
364
+ return [];
365
+ }
366
+ }
367
+ /**
368
+ * Check for LLM artifacts using enhanced detector
369
+ */
370
+ async function checkLLMArtifacts(filePath, content) {
371
+ try {
372
+ // Use enhanced LLM artifact detector
373
+ const { detectLLMArtifacts } = await import('../utils/llm-artifact-detector.js');
374
+ const result = detectLLMArtifacts(filePath, content || '');
375
+ // Convert to ValidationIssue format
376
+ const issues = [];
377
+ for (const match of result.matches) {
378
+ const issue = {
379
+ type: 'llm-artifact',
380
+ severity: match.pattern.severity === 'error' ? 'error' :
381
+ match.pattern.severity === 'warning' ? 'warning' : 'info',
382
+ message: `${match.pattern.description}: ${match.match}`,
383
+ pattern: match.pattern.name
384
+ };
385
+ if (match.line !== undefined) {
386
+ issue.line = match.line;
387
+ }
388
+ issues.push(issue);
389
+ }
390
+ return issues;
391
+ }
392
+ catch (error) {
393
+ console.error('LLM artifact check failed:', error);
394
+ return [];
395
+ }
396
+ }
397
+ /**
398
+ * Check location rules using enhanced location filter
399
+ */
400
+ async function checkLocationRules(filePath, allowedArtifacts) {
401
+ try {
402
+ // Use enhanced location filter
403
+ const { validateFileLocation } = await import('../utils/location-filter.js');
404
+ // Skip if explicitly allowed
405
+ if (allowedArtifacts.includes(basename(filePath)) || allowedArtifacts.includes(filePath)) {
406
+ return [];
407
+ }
408
+ const result = validateFileLocation(filePath);
409
+ if (!result.isValid) {
410
+ return [{
411
+ type: 'wrong-location',
412
+ severity: result.severity === 'error' ? 'error' :
413
+ result.severity === 'warning' ? 'warning' : 'info',
414
+ message: result.message,
415
+ pattern: result.rule?.name || 'location-rule'
416
+ }];
417
+ }
418
+ return [];
419
+ }
420
+ catch (error) {
421
+ console.error('Location rule check failed:', error);
422
+ return [];
423
+ }
424
+ }
425
+ /**
426
+ * Generate suggestions for issues
427
+ */
428
+ function generateSuggestions(filePath, issues) {
429
+ const suggestions = [];
430
+ const fileName = basename(filePath);
431
+ for (const issue of issues) {
432
+ switch (issue.type) {
433
+ case 'sensitive-content':
434
+ suggestions.push(`Use content masking tool: analyze_content_security`);
435
+ suggestions.push(`Move sensitive data to environment variables`);
436
+ suggestions.push(`Add ${filePath} to .gitignore if it's config`);
437
+ break;
438
+ case 'llm-artifact':
439
+ suggestions.push(`Move ${fileName} to tests/ directory`);
440
+ suggestions.push(`Move ${fileName} to scripts/ directory`);
441
+ suggestions.push(`Add ${filePath} to .gitignore`);
442
+ suggestions.push(`Remove file if it's temporary`);
443
+ break;
444
+ case 'wrong-location':
445
+ suggestions.push(`Move ${fileName} to tests/ directory`);
446
+ suggestions.push(`Move ${fileName} to scripts/ directory`);
447
+ suggestions.push(`Move ${fileName} to tools/ directory`);
448
+ break;
449
+ }
450
+ }
451
+ return [...new Set(suggestions)]; // Remove duplicates
452
+ }
453
+ /**
454
+ * Execute git push
455
+ */
456
+ async function executePush(projectPath, branch, message) {
457
+ try {
458
+ let output = '';
459
+ // Commit if there are staged changes and a message is provided
460
+ if (message) {
461
+ const commitOutput = execSync(`git commit -m "${message}"`, {
462
+ cwd: projectPath,
463
+ encoding: 'utf8'
464
+ });
465
+ output += `Commit:\n${commitOutput}\n\n`;
466
+ }
467
+ // Push to the specified branch or current branch
468
+ const pushCommand = branch ? `git push origin ${branch}` : 'git push';
469
+ const pushOutput = execSync(pushCommand, {
470
+ cwd: projectPath,
471
+ encoding: 'utf8'
472
+ });
473
+ output += `Push:\n${pushOutput}`;
474
+ return { output, success: true };
475
+ }
476
+ catch (error) {
477
+ throw new McpAdrError(`Git push failed: ${error instanceof Error ? error.message : String(error)}`, 'GIT_PUSH_FAILED');
478
+ }
479
+ }
480
+ //# sourceMappingURL=smart-git-push-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-git-push-tool.js","sourceRoot":"","sources":["../../../src/tools/smart-git-push-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Enhanced sensitive content detector for smart git push
3
+ *
4
+ * Integrates with existing content-masking-tool.ts and adds git-specific patterns
5
+ */
6
+ export interface SensitivePattern {
7
+ name: string;
8
+ pattern: RegExp;
9
+ description: string;
10
+ category: 'credentials' | 'secrets' | 'personal' | 'infrastructure' | 'development';
11
+ severity: 'critical' | 'high' | 'medium' | 'low';
12
+ falsePositivePatterns?: RegExp[];
13
+ contextRequired?: boolean;
14
+ }
15
+ export interface SensitiveMatch {
16
+ pattern: SensitivePattern;
17
+ match: string;
18
+ line: number;
19
+ column: number;
20
+ context: string;
21
+ confidence: number;
22
+ suggestions: string[];
23
+ }
24
+ export interface SensitiveContentResult {
25
+ filePath: string;
26
+ hasIssues: boolean;
27
+ matches: SensitiveMatch[];
28
+ summary: {
29
+ criticalCount: number;
30
+ highCount: number;
31
+ mediumCount: number;
32
+ lowCount: number;
33
+ totalCount: number;
34
+ };
35
+ recommendations: string[];
36
+ }
37
+ /**
38
+ * Enhanced sensitive patterns for git context
39
+ */
40
+ export declare const GIT_SENSITIVE_PATTERNS: SensitivePattern[];
41
+ /**
42
+ * Analyze content for sensitive information
43
+ */
44
+ export declare function analyzeSensitiveContent(filePath: string, content: string, customPatterns?: SensitivePattern[]): Promise<SensitiveContentResult>;
45
+ /**
46
+ * Integration with existing content masking tool
47
+ */
48
+ export declare function integrateWithContentMasking(filePath: string, content: string): Promise<{
49
+ sensitiveAnalysis: SensitiveContentResult;
50
+ maskingPrompt?: string;
51
+ combinedRecommendations: string[];
52
+ }>;
53
+ /**
54
+ * Quick check for obviously sensitive files
55
+ */
56
+ export declare function isObviouslySensitive(filePath: string): boolean;
57
+ /**
58
+ * Create a custom sensitive pattern
59
+ */
60
+ export declare function createSensitivePattern(name: string, pattern: string, description: string, category: SensitivePattern['category'], severity: SensitivePattern['severity']): SensitivePattern;
61
+ //# sourceMappingURL=enhanced-sensitive-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-sensitive-detector.d.ts","sourceRoot":"","sources":["../../../src/utils/enhanced-sensitive-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,GAAG,aAAa,CAAC;IACpF,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,gBAAgB,EA8JpD,CAAC;AAEF;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,gBAAgB,EAAO,GACtC,OAAO,CAAC,sBAAsB,CAAC,CA8EjC;AAkJD;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IACT,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,MAAM,EAAE,CAAC;CACnC,CAAC,CA8CD;AA2BD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAmB9D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,EACtC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,GACrC,gBAAgB,CAQlB"}