atlas-pipeline-mcp 1.0.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/.env.example +21 -0
- package/LICENSE +21 -0
- package/README.md +175 -0
- package/dist/mcp.d.ts +21 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +404 -0
- package/dist/mcp.js.map +1 -0
- package/dist/pipeline.d.ts +39 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +355 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/providers/index.d.ts +14 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +13 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/llm-provider.d.ts +71 -0
- package/dist/providers/llm-provider.d.ts.map +1 -0
- package/dist/providers/llm-provider.js +357 -0
- package/dist/providers/llm-provider.js.map +1 -0
- package/dist/server.d.ts +27 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +312 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/context.d.ts +23 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +363 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/critique.d.ts +40 -0
- package/dist/tools/critique.d.ts.map +1 -0
- package/dist/tools/critique.js +315 -0
- package/dist/tools/critique.js.map +1 -0
- package/dist/tools/decompose.d.ts +34 -0
- package/dist/tools/decompose.d.ts.map +1 -0
- package/dist/tools/decompose.js +328 -0
- package/dist/tools/decompose.js.map +1 -0
- package/dist/tools/git.d.ts +66 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +333 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/intent.d.ts +24 -0
- package/dist/tools/intent.d.ts.map +1 -0
- package/dist/tools/intent.js +245 -0
- package/dist/tools/intent.js.map +1 -0
- package/dist/tools/ollama.d.ts +104 -0
- package/dist/tools/ollama.d.ts.map +1 -0
- package/dist/tools/ollama.js +299 -0
- package/dist/tools/ollama.js.map +1 -0
- package/dist/tools/optimize.d.ts +64 -0
- package/dist/tools/optimize.d.ts.map +1 -0
- package/dist/tools/optimize.js +302 -0
- package/dist/tools/optimize.js.map +1 -0
- package/dist/tools/variants.d.ts +49 -0
- package/dist/tools/variants.d.ts.map +1 -0
- package/dist/tools/variants.js +252 -0
- package/dist/tools/variants.js.map +1 -0
- package/dist/types.d.ts +447 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +117 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +279 -0
- package/dist/utils.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Task Decomposition Tool
|
|
3
|
+
*
|
|
4
|
+
* Breaks down complex user requests into:
|
|
5
|
+
* - Smaller, actionable subtasks
|
|
6
|
+
* - Dependency relationships
|
|
7
|
+
* - Priority and complexity estimates
|
|
8
|
+
* - Suggested execution order
|
|
9
|
+
*/
|
|
10
|
+
import { getOllamaClient, PromptTemplates } from './ollama.js';
|
|
11
|
+
import { logger } from '../utils.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Configuration
|
|
14
|
+
// ============================================================================
|
|
15
|
+
const MAX_TASKS = 10;
|
|
16
|
+
const MIN_TASKS = 1;
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Task Decomposition
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Decompose a complex request into actionable tasks
|
|
22
|
+
*/
|
|
23
|
+
export async function decomposeTask(context) {
|
|
24
|
+
logger.debug({ intent: context.intent.primaryIntent }, 'Starting task decomposition');
|
|
25
|
+
const { intent, codeSnippets, projectInfo } = context;
|
|
26
|
+
// For simple, high-confidence intents, use rule-based decomposition
|
|
27
|
+
if (intent.confidence >= 0.9 && isSimpleIntent(intent.primaryIntent)) {
|
|
28
|
+
return ruleBasedDecomposition(context);
|
|
29
|
+
}
|
|
30
|
+
// For complex requests, use LLM-based decomposition
|
|
31
|
+
return llmDecomposition(context);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if intent is simple enough for rule-based decomposition
|
|
35
|
+
*/
|
|
36
|
+
function isSimpleIntent(intentType) {
|
|
37
|
+
return ['explanation', 'documentation', 'general_question'].includes(intentType);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Rule-based decomposition for simple intents
|
|
41
|
+
*/
|
|
42
|
+
function ruleBasedDecomposition(context) {
|
|
43
|
+
const { intent } = context;
|
|
44
|
+
const tasks = [];
|
|
45
|
+
switch (intent.primaryIntent) {
|
|
46
|
+
case 'explanation':
|
|
47
|
+
tasks.push(createTask('research', 'Research the concept', 1, 'low'), createTask('implementation', 'Prepare clear explanation', 2, 'low', ['1']));
|
|
48
|
+
break;
|
|
49
|
+
case 'documentation':
|
|
50
|
+
tasks.push(createTask('research', 'Analyze code to document', 1, 'low'), createTask('documentation', 'Write documentation', 2, 'medium', ['1']), createTask('review', 'Review for clarity', 3, 'low', ['2']));
|
|
51
|
+
break;
|
|
52
|
+
case 'general_question':
|
|
53
|
+
tasks.push(createTask('research', 'Research the answer', 1, 'low'), createTask('implementation', 'Formulate response', 2, 'low', ['1']));
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
tasks.push(createTask('research', 'Understand requirements', 1, 'low'), createTask('implementation', 'Implement solution', 2, 'medium', ['1']));
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
summary: summarizeIntent(context),
|
|
60
|
+
tasks,
|
|
61
|
+
executionOrder: tasks.map((t) => t.id),
|
|
62
|
+
overallComplexity: 'low',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* LLM-based decomposition for complex requests
|
|
67
|
+
*/
|
|
68
|
+
async function llmDecomposition(context) {
|
|
69
|
+
const client = getOllamaClient();
|
|
70
|
+
const prompt = buildDecompositionPrompt(context);
|
|
71
|
+
const response = await client.generateJson(prompt, {
|
|
72
|
+
systemPrompt: PromptTemplates.taskDecomposition,
|
|
73
|
+
temperature: 0.4,
|
|
74
|
+
});
|
|
75
|
+
if (response.data) {
|
|
76
|
+
const tasks = response.data.tasks
|
|
77
|
+
.slice(0, MAX_TASKS)
|
|
78
|
+
.map((t, index) => ({
|
|
79
|
+
id: (index + 1).toString(),
|
|
80
|
+
description: t.description,
|
|
81
|
+
type: t.type,
|
|
82
|
+
priority: Math.min(5, Math.max(1, t.priority)),
|
|
83
|
+
dependencies: t.dependencies,
|
|
84
|
+
complexity: normalizeComplexity(t.complexity),
|
|
85
|
+
approach: t.approach,
|
|
86
|
+
}));
|
|
87
|
+
return {
|
|
88
|
+
summary: response.data.summary,
|
|
89
|
+
tasks,
|
|
90
|
+
executionOrder: calculateExecutionOrder(tasks),
|
|
91
|
+
overallComplexity: normalizeComplexity(response.data.overallComplexity),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Fallback to simple decomposition
|
|
95
|
+
logger.warn('LLM decomposition failed, using fallback');
|
|
96
|
+
return fallbackDecomposition(context);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Build the decomposition prompt with context
|
|
100
|
+
*/
|
|
101
|
+
function buildDecompositionPrompt(context) {
|
|
102
|
+
const { intent, codeSnippets, projectInfo, gitContext } = context;
|
|
103
|
+
let prompt = `Decompose this development task into actionable subtasks.
|
|
104
|
+
|
|
105
|
+
## User Intent
|
|
106
|
+
- Type: ${intent.primaryIntent}
|
|
107
|
+
- Keywords: ${intent.keywords.join(', ')}
|
|
108
|
+
- Entities: ${intent.entities.map((e) => `${e.type}: ${e.value}`).join(', ')}
|
|
109
|
+
`;
|
|
110
|
+
if (projectInfo) {
|
|
111
|
+
prompt += `
|
|
112
|
+
## Project Context
|
|
113
|
+
- Languages: ${projectInfo.languages.join(', ')}
|
|
114
|
+
- Frameworks: ${projectInfo.frameworks.join(', ')}
|
|
115
|
+
- Package Manager: ${projectInfo.packageManager ?? 'unknown'}
|
|
116
|
+
`;
|
|
117
|
+
}
|
|
118
|
+
if (gitContext) {
|
|
119
|
+
prompt += `
|
|
120
|
+
## Git Context
|
|
121
|
+
- Branch: ${gitContext.currentBranch}
|
|
122
|
+
- Has uncommitted changes: ${gitContext.isDirty}
|
|
123
|
+
- Recent commits: ${gitContext.recentCommits.slice(0, 3).map((c) => c.message).join('; ')}
|
|
124
|
+
`;
|
|
125
|
+
}
|
|
126
|
+
if (codeSnippets.length > 0) {
|
|
127
|
+
prompt += `
|
|
128
|
+
## Relevant Code
|
|
129
|
+
${codeSnippets.slice(0, 2).map((s) => `File: ${s.filePath}\n\`\`\`${s.language}\n${s.content.substring(0, 500)}\n\`\`\``).join('\n\n')}
|
|
130
|
+
`;
|
|
131
|
+
}
|
|
132
|
+
prompt += `
|
|
133
|
+
## Output Format
|
|
134
|
+
Provide a JSON object with:
|
|
135
|
+
{
|
|
136
|
+
"summary": "Brief description of the overall task",
|
|
137
|
+
"tasks": [
|
|
138
|
+
{
|
|
139
|
+
"description": "Task description",
|
|
140
|
+
"type": "research|design|implementation|testing|documentation|review",
|
|
141
|
+
"priority": 1-5,
|
|
142
|
+
"complexity": "low|medium|high",
|
|
143
|
+
"dependencies": ["task_ids this depends on"],
|
|
144
|
+
"approach": "Suggested approach (optional)"
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
"overallComplexity": "low|medium|high"
|
|
148
|
+
}`;
|
|
149
|
+
return prompt;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Calculate optimal execution order based on dependencies
|
|
153
|
+
*/
|
|
154
|
+
function calculateExecutionOrder(tasks) {
|
|
155
|
+
const order = [];
|
|
156
|
+
const completed = new Set();
|
|
157
|
+
const remaining = new Set(tasks.map((t) => t.id));
|
|
158
|
+
// Topological sort
|
|
159
|
+
while (remaining.size > 0) {
|
|
160
|
+
let progress = false;
|
|
161
|
+
for (const taskId of remaining) {
|
|
162
|
+
const task = tasks.find((t) => t.id === taskId);
|
|
163
|
+
if (!task)
|
|
164
|
+
continue;
|
|
165
|
+
// Check if all dependencies are completed
|
|
166
|
+
const dependenciesMet = task.dependencies.every((dep) => completed.has(dep));
|
|
167
|
+
if (dependenciesMet) {
|
|
168
|
+
order.push(taskId);
|
|
169
|
+
completed.add(taskId);
|
|
170
|
+
remaining.delete(taskId);
|
|
171
|
+
progress = true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// If no progress, we have a cycle - just add remaining in order
|
|
175
|
+
if (!progress) {
|
|
176
|
+
for (const taskId of remaining) {
|
|
177
|
+
order.push(taskId);
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return order;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Fallback decomposition when LLM fails
|
|
186
|
+
*/
|
|
187
|
+
function fallbackDecomposition(context) {
|
|
188
|
+
const { intent } = context;
|
|
189
|
+
const tasks = [
|
|
190
|
+
createTask('research', 'Understand requirements and gather context', 1, 'low'),
|
|
191
|
+
createTask('design', 'Design solution approach', 2, 'medium', ['1']),
|
|
192
|
+
createTask('implementation', 'Implement the solution', 3, 'medium', ['2']),
|
|
193
|
+
createTask('testing', 'Test and validate', 4, 'low', ['3']),
|
|
194
|
+
createTask('review', 'Review and refine', 5, 'low', ['4']),
|
|
195
|
+
];
|
|
196
|
+
return {
|
|
197
|
+
summary: summarizeIntent(context),
|
|
198
|
+
tasks,
|
|
199
|
+
executionOrder: tasks.map((t) => t.id),
|
|
200
|
+
overallComplexity: 'medium',
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
// ============================================================================
|
|
204
|
+
// Helper Functions
|
|
205
|
+
// ============================================================================
|
|
206
|
+
/**
|
|
207
|
+
* Create a task with defaults
|
|
208
|
+
*/
|
|
209
|
+
function createTask(type, description, priority, complexity, dependencies = []) {
|
|
210
|
+
return {
|
|
211
|
+
id: priority.toString(),
|
|
212
|
+
description,
|
|
213
|
+
type,
|
|
214
|
+
priority,
|
|
215
|
+
dependencies,
|
|
216
|
+
complexity,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Normalize complexity string to valid value
|
|
221
|
+
*/
|
|
222
|
+
function normalizeComplexity(value) {
|
|
223
|
+
const normalized = value.toLowerCase();
|
|
224
|
+
if (normalized === 'low' || normalized === 'medium' || normalized === 'high') {
|
|
225
|
+
return normalized;
|
|
226
|
+
}
|
|
227
|
+
return 'medium';
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Create a summary from intent
|
|
231
|
+
*/
|
|
232
|
+
function summarizeIntent(context) {
|
|
233
|
+
const { intent } = context;
|
|
234
|
+
const action = intent.primaryIntent.replace(/_/g, ' ');
|
|
235
|
+
const entities = intent.entities.map((e) => e.value).join(', ');
|
|
236
|
+
if (entities) {
|
|
237
|
+
return `${action} involving ${entities}`;
|
|
238
|
+
}
|
|
239
|
+
return action;
|
|
240
|
+
}
|
|
241
|
+
// ============================================================================
|
|
242
|
+
// Task Utilities
|
|
243
|
+
// ============================================================================
|
|
244
|
+
/**
|
|
245
|
+
* Estimate total effort from tasks
|
|
246
|
+
*/
|
|
247
|
+
export function estimateTotalEffort(tasks) {
|
|
248
|
+
const efforts = tasks.map((task) => {
|
|
249
|
+
switch (task.complexity) {
|
|
250
|
+
case 'low': return { min: 0.5, max: 2 };
|
|
251
|
+
case 'medium': return { min: 2, max: 8 };
|
|
252
|
+
case 'high': return { min: 8, max: 24 };
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
const minHours = efforts.reduce((sum, e) => sum + e.min, 0);
|
|
256
|
+
const maxHours = efforts.reduce((sum, e) => sum + e.max, 0);
|
|
257
|
+
return {
|
|
258
|
+
minHours,
|
|
259
|
+
maxHours,
|
|
260
|
+
averageHours: (minHours + maxHours) / 2,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get critical path (longest dependency chain)
|
|
265
|
+
*/
|
|
266
|
+
export function getCriticalPath(tasks) {
|
|
267
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
268
|
+
let longestPath = [];
|
|
269
|
+
function findPath(taskId, currentPath) {
|
|
270
|
+
const task = taskMap.get(taskId);
|
|
271
|
+
if (!task)
|
|
272
|
+
return;
|
|
273
|
+
const newPath = [...currentPath, taskId];
|
|
274
|
+
if (newPath.length > longestPath.length) {
|
|
275
|
+
longestPath = newPath;
|
|
276
|
+
}
|
|
277
|
+
// Find tasks that depend on this one
|
|
278
|
+
for (const t of tasks) {
|
|
279
|
+
if (t.dependencies.includes(taskId)) {
|
|
280
|
+
findPath(t.id, newPath);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Start from tasks with no dependencies
|
|
285
|
+
for (const task of tasks) {
|
|
286
|
+
if (task.dependencies.length === 0) {
|
|
287
|
+
findPath(task.id, []);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return longestPath;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Check if tasks form a valid DAG (no cycles)
|
|
294
|
+
*/
|
|
295
|
+
export function validateTaskGraph(tasks) {
|
|
296
|
+
const visited = new Set();
|
|
297
|
+
const recursionStack = new Set();
|
|
298
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
299
|
+
function hasCycle(taskId) {
|
|
300
|
+
visited.add(taskId);
|
|
301
|
+
recursionStack.add(taskId);
|
|
302
|
+
const task = taskMap.get(taskId);
|
|
303
|
+
if (task) {
|
|
304
|
+
for (const depId of task.dependencies) {
|
|
305
|
+
if (!visited.has(depId)) {
|
|
306
|
+
const cycle = hasCycle(depId);
|
|
307
|
+
if (cycle)
|
|
308
|
+
return cycle;
|
|
309
|
+
}
|
|
310
|
+
else if (recursionStack.has(depId)) {
|
|
311
|
+
return [depId, taskId];
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
recursionStack.delete(taskId);
|
|
316
|
+
return null;
|
|
317
|
+
}
|
|
318
|
+
for (const task of tasks) {
|
|
319
|
+
if (!visited.has(task.id)) {
|
|
320
|
+
const cycle = hasCycle(task.id);
|
|
321
|
+
if (cycle) {
|
|
322
|
+
return { valid: false, cycleNodes: cycle };
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return { valid: true };
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=decompose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompose.js","sourceRoot":"","sources":["../../src/tools/decompose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Git Context Tool
|
|
3
|
+
*
|
|
4
|
+
* Provides git repository context including:
|
|
5
|
+
* - Current branch and status
|
|
6
|
+
* - Recent commit history
|
|
7
|
+
* - Uncommitted changes
|
|
8
|
+
* - File history and blame information
|
|
9
|
+
*/
|
|
10
|
+
import type { GitContext, GitCommit } from '../types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Get comprehensive git context for a repository
|
|
13
|
+
*/
|
|
14
|
+
export declare function getGitContext(repoPath: string, commitLimit?: number): Promise<GitContext | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Get the diff for uncommitted changes
|
|
17
|
+
*/
|
|
18
|
+
export declare function getUncommittedDiff(repoPath: string): Promise<string | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Get the diff for a specific commit
|
|
21
|
+
*/
|
|
22
|
+
export declare function getCommitDiff(repoPath: string, commitHash: string): Promise<string | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Get blame information for a file
|
|
25
|
+
*/
|
|
26
|
+
export declare function getFileBlame(repoPath: string, filePath: string): Promise<BlameInfo[] | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Get file history (commits that modified a file)
|
|
29
|
+
*/
|
|
30
|
+
export declare function getFileHistory(repoPath: string, filePath: string, limit?: number): Promise<GitCommit[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Get list of files changed between two refs
|
|
33
|
+
*/
|
|
34
|
+
export declare function getChangedFiles(repoPath: string, fromRef: string, toRef?: string): Promise<string[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Get the current HEAD commit hash
|
|
37
|
+
*/
|
|
38
|
+
export declare function getHeadCommit(repoPath: string): Promise<string | null>;
|
|
39
|
+
/**
|
|
40
|
+
* List all branches (local and remote)
|
|
41
|
+
*/
|
|
42
|
+
export declare function listBranches(repoPath: string): Promise<{
|
|
43
|
+
current: string;
|
|
44
|
+
local: string[];
|
|
45
|
+
remote: string[];
|
|
46
|
+
}>;
|
|
47
|
+
export interface BlameInfo {
|
|
48
|
+
lineNumber: number;
|
|
49
|
+
commitHash: string;
|
|
50
|
+
author: string;
|
|
51
|
+
date: string;
|
|
52
|
+
content: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a new branch
|
|
56
|
+
*/
|
|
57
|
+
export declare function createBranch(repoPath: string, branchName: string, startPoint?: string): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* Stage files for commit
|
|
60
|
+
*/
|
|
61
|
+
export declare function stageFiles(repoPath: string, files: string[]): Promise<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* Create a commit
|
|
64
|
+
*/
|
|
65
|
+
export declare function createCommit(repoPath: string, message: string): Promise<string | null>;
|
|
66
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AAapE;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAA6B,GACzC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA0C5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASjF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAS7B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CAYtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAe,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS5E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAgBD;AA4FD,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAuDD;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAUpF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB"}
|