agentic-qe 2.7.1 → 2.7.2

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 (149) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/README.md +2 -2
  3. package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
  4. package/dist/agents/CodeIntelligenceAgent.js +7 -5
  5. package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
  6. package/dist/cli/commands/knowledge-graph.d.ts.map +1 -1
  7. package/dist/cli/commands/knowledge-graph.js +4 -2
  8. package/dist/cli/commands/knowledge-graph.js.map +1 -1
  9. package/dist/cli/commands/migrate/index.d.ts +14 -0
  10. package/dist/cli/commands/migrate/index.d.ts.map +1 -0
  11. package/dist/cli/commands/migrate/index.js +283 -0
  12. package/dist/cli/commands/migrate/index.js.map +1 -0
  13. package/dist/cli/formatters/KGOutputFormatter.d.ts.map +1 -1
  14. package/dist/cli/formatters/KGOutputFormatter.js +15 -6
  15. package/dist/cli/formatters/KGOutputFormatter.js.map +1 -1
  16. package/dist/cli/index.js +3 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/init/database-init.d.ts.map +1 -1
  19. package/dist/cli/init/database-init.js +105 -0
  20. package/dist/cli/init/database-init.js.map +1 -1
  21. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts +9 -3
  22. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -1
  23. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +41 -3
  24. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -1
  25. package/dist/code-intelligence/service/CodeIntelligenceService.js +1 -1
  26. package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -1
  27. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  28. package/dist/learning/QLearning.d.ts +9 -1
  29. package/dist/learning/QLearning.d.ts.map +1 -1
  30. package/dist/learning/QLearning.js +50 -1
  31. package/dist/learning/QLearning.js.map +1 -1
  32. package/dist/learning/metrics/LearningMetrics.d.ts +37 -0
  33. package/dist/learning/metrics/LearningMetrics.d.ts.map +1 -1
  34. package/dist/learning/metrics/LearningMetrics.js +73 -0
  35. package/dist/learning/metrics/LearningMetrics.js.map +1 -1
  36. package/dist/mcp/handlers/fleet-init.d.ts +10 -0
  37. package/dist/mcp/handlers/fleet-init.d.ts.map +1 -1
  38. package/dist/mcp/handlers/fleet-init.js +61 -0
  39. package/dist/mcp/handlers/fleet-init.js.map +1 -1
  40. package/dist/mcp/handlers/learning/learning-store-pattern.d.ts +13 -0
  41. package/dist/mcp/handlers/learning/learning-store-pattern.d.ts.map +1 -1
  42. package/dist/mcp/handlers/learning/learning-store-pattern.js +38 -0
  43. package/dist/mcp/handlers/learning/learning-store-pattern.js.map +1 -1
  44. package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +89 -0
  45. package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -1
  46. package/dist/mcp/handlers/phase3/Phase3DomainTools.js +110 -1
  47. package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -1
  48. package/dist/mcp/handlers/task-orchestrate.d.ts +27 -1
  49. package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
  50. package/dist/mcp/handlers/task-orchestrate.js +188 -8
  51. package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
  52. package/dist/mcp/server-instructions.d.ts +1 -1
  53. package/dist/mcp/server-instructions.js +1 -1
  54. package/dist/mcp/server.d.ts +6 -0
  55. package/dist/mcp/server.d.ts.map +1 -1
  56. package/dist/mcp/server.js +92 -2
  57. package/dist/mcp/server.js.map +1 -1
  58. package/dist/mcp/services/AgentRegistry.d.ts +13 -0
  59. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  60. package/dist/mcp/services/AgentRegistry.js +66 -0
  61. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  62. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +55 -0
  63. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -1
  64. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +233 -0
  65. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -1
  66. package/dist/mcp/tools/qe/quality-gates/index.d.ts +5 -2
  67. package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -1
  68. package/dist/mcp/tools/qe/quality-gates/index.js +10 -1
  69. package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -1
  70. package/dist/mcp/tools.d.ts +1 -0
  71. package/dist/mcp/tools.d.ts.map +1 -1
  72. package/dist/mcp/tools.js +156 -1
  73. package/dist/mcp/tools.js.map +1 -1
  74. package/dist/persistence/migrations/all-migrations.d.ts +18 -0
  75. package/dist/persistence/migrations/all-migrations.d.ts.map +1 -0
  76. package/dist/persistence/migrations/all-migrations.js +624 -0
  77. package/dist/persistence/migrations/all-migrations.js.map +1 -0
  78. package/dist/persistence/migrations/index.d.ts +110 -0
  79. package/dist/persistence/migrations/index.d.ts.map +1 -0
  80. package/dist/persistence/migrations/index.js +303 -0
  81. package/dist/persistence/migrations/index.js.map +1 -0
  82. package/dist/planning/GOAPPlanner.d.ts +128 -0
  83. package/dist/planning/GOAPPlanner.d.ts.map +1 -0
  84. package/dist/planning/GOAPPlanner.js +630 -0
  85. package/dist/planning/GOAPPlanner.js.map +1 -0
  86. package/dist/planning/WorldStateBuilder.d.ts +150 -0
  87. package/dist/planning/WorldStateBuilder.d.ts.map +1 -0
  88. package/dist/planning/WorldStateBuilder.js +267 -0
  89. package/dist/planning/WorldStateBuilder.js.map +1 -0
  90. package/dist/planning/actions/fleet-actions.d.ts +78 -0
  91. package/dist/planning/actions/fleet-actions.d.ts.map +1 -0
  92. package/dist/planning/actions/fleet-actions.js +329 -0
  93. package/dist/planning/actions/fleet-actions.js.map +1 -0
  94. package/dist/planning/actions/index.d.ts +61 -0
  95. package/dist/planning/actions/index.d.ts.map +1 -0
  96. package/dist/planning/actions/index.js +159 -0
  97. package/dist/planning/actions/index.js.map +1 -0
  98. package/dist/planning/actions/orchestration-actions.d.ts +61 -0
  99. package/dist/planning/actions/orchestration-actions.d.ts.map +1 -0
  100. package/dist/planning/actions/orchestration-actions.js +395 -0
  101. package/dist/planning/actions/orchestration-actions.js.map +1 -0
  102. package/dist/planning/actions/quality-gate-actions.d.ts +160 -0
  103. package/dist/planning/actions/quality-gate-actions.d.ts.map +1 -0
  104. package/dist/planning/actions/quality-gate-actions.js +639 -0
  105. package/dist/planning/actions/quality-gate-actions.js.map +1 -0
  106. package/dist/planning/actions/test-strategy-actions.d.ts +70 -0
  107. package/dist/planning/actions/test-strategy-actions.d.ts.map +1 -0
  108. package/dist/planning/actions/test-strategy-actions.js +278 -0
  109. package/dist/planning/actions/test-strategy-actions.js.map +1 -0
  110. package/dist/planning/execution/PlanExecutor.d.ts +124 -0
  111. package/dist/planning/execution/PlanExecutor.d.ts.map +1 -0
  112. package/dist/planning/execution/PlanExecutor.js +405 -0
  113. package/dist/planning/execution/PlanExecutor.js.map +1 -0
  114. package/dist/planning/execution/index.d.ts +12 -0
  115. package/dist/planning/execution/index.d.ts.map +1 -0
  116. package/dist/planning/execution/index.js +18 -0
  117. package/dist/planning/execution/index.js.map +1 -0
  118. package/dist/planning/goals/TaskWorkflowGoals.d.ts +67 -0
  119. package/dist/planning/goals/TaskWorkflowGoals.d.ts.map +1 -0
  120. package/dist/planning/goals/TaskWorkflowGoals.js +208 -0
  121. package/dist/planning/goals/TaskWorkflowGoals.js.map +1 -0
  122. package/dist/planning/goals/index.d.ts +10 -0
  123. package/dist/planning/goals/index.d.ts.map +1 -0
  124. package/dist/planning/goals/index.js +19 -0
  125. package/dist/planning/goals/index.js.map +1 -0
  126. package/dist/planning/index.d.ts +34 -0
  127. package/dist/planning/index.d.ts.map +1 -0
  128. package/dist/planning/index.js +176 -0
  129. package/dist/planning/index.js.map +1 -0
  130. package/dist/planning/integration/GOAPQualityGateIntegration.d.ts +229 -0
  131. package/dist/planning/integration/GOAPQualityGateIntegration.d.ts.map +1 -0
  132. package/dist/planning/integration/GOAPQualityGateIntegration.js +582 -0
  133. package/dist/planning/integration/GOAPQualityGateIntegration.js.map +1 -0
  134. package/dist/planning/integration/GOAPTaskOrchestration.d.ts +165 -0
  135. package/dist/planning/integration/GOAPTaskOrchestration.d.ts.map +1 -0
  136. package/dist/planning/integration/GOAPTaskOrchestration.js +490 -0
  137. package/dist/planning/integration/GOAPTaskOrchestration.js.map +1 -0
  138. package/dist/planning/integration/index.d.ts +14 -0
  139. package/dist/planning/integration/index.d.ts.map +1 -0
  140. package/dist/planning/integration/index.js +23 -0
  141. package/dist/planning/integration/index.js.map +1 -0
  142. package/dist/planning/types.d.ts +264 -0
  143. package/dist/planning/types.d.ts.map +1 -0
  144. package/dist/planning/types.js +63 -0
  145. package/dist/planning/types.js.map +1 -0
  146. package/dist/utils/Database.d.ts.map +1 -1
  147. package/dist/utils/Database.js +81 -2
  148. package/dist/utils/Database.js.map +1 -1
  149. package/package.json +6 -3
@@ -0,0 +1,630 @@
1
+ "use strict";
2
+ /**
3
+ * GOAP Planner - A* Search Algorithm for Goal-Oriented Action Planning
4
+ *
5
+ * Implements optimal plan finding using A* search with:
6
+ * - Precondition checking
7
+ * - Effect application
8
+ * - Heuristic calculation
9
+ * - Plan reconstruction
10
+ *
11
+ * @module planning/GOAPPlanner
12
+ * @version 1.0.0
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.GOAPPlanner = void 0;
16
+ exports.getSharedGOAPPlanner = getSharedGOAPPlanner;
17
+ exports.resetSharedGOAPPlanner = resetSharedGOAPPlanner;
18
+ const Logger_1 = require("../utils/Logger");
19
+ /**
20
+ * GOAP Planner using A* search algorithm
21
+ */
22
+ class GOAPPlanner {
23
+ constructor(db) {
24
+ this.actionLibrary = [];
25
+ this.actionsLoaded = false;
26
+ this.db = db;
27
+ this.logger = Logger_1.Logger.getInstance();
28
+ }
29
+ /**
30
+ * Load action library from database (merges with programmatic actions)
31
+ */
32
+ async loadActionsFromDatabase() {
33
+ if (this.actionsLoaded)
34
+ return;
35
+ try {
36
+ const rows = this.db.prepare(`
37
+ SELECT * FROM goap_actions ORDER BY category, cost ASC
38
+ `).all();
39
+ // Merge DB actions with existing programmatic actions (avoid duplicates)
40
+ const existingIds = new Set(this.actionLibrary.map(a => a.id));
41
+ const dbActions = rows
42
+ .filter(row => !existingIds.has(row.id))
43
+ .map(row => ({
44
+ id: row.id,
45
+ name: row.name,
46
+ description: row.description || undefined,
47
+ agentType: row.agent_type,
48
+ preconditions: JSON.parse(row.preconditions),
49
+ effects: JSON.parse(row.effects),
50
+ cost: row.cost,
51
+ durationEstimate: row.duration_estimate || undefined,
52
+ successRate: row.success_rate,
53
+ executionCount: row.execution_count,
54
+ category: row.category
55
+ }));
56
+ this.actionLibrary.push(...dbActions);
57
+ this.actionsLoaded = true;
58
+ this.logger.debug(`[GOAPPlanner] Loaded ${dbActions.length} actions from database (total: ${this.actionLibrary.length})`);
59
+ }
60
+ catch (error) {
61
+ this.logger.warn('[GOAPPlanner] Failed to load actions from database, keeping existing library', { error });
62
+ // Keep existing actions instead of clearing
63
+ }
64
+ }
65
+ /**
66
+ * Add actions programmatically (for testing or bootstrap)
67
+ */
68
+ addActions(actions) {
69
+ this.actionLibrary.push(...actions);
70
+ }
71
+ /**
72
+ * Clear action library
73
+ */
74
+ clearActions() {
75
+ this.actionLibrary = [];
76
+ this.actionsLoaded = false;
77
+ }
78
+ /**
79
+ * Get current action library
80
+ */
81
+ getActionLibrary() {
82
+ return [...this.actionLibrary];
83
+ }
84
+ /**
85
+ * Ensure GOAP schema exists (creates missing tables)
86
+ */
87
+ ensureSchema() {
88
+ // Create goap_execution_steps if missing
89
+ this.db.exec(`
90
+ CREATE TABLE IF NOT EXISTS goap_execution_steps (
91
+ id TEXT PRIMARY KEY,
92
+ plan_id TEXT NOT NULL,
93
+ action_id TEXT NOT NULL,
94
+ step_order INTEGER NOT NULL,
95
+ world_state_before TEXT,
96
+ world_state_after TEXT,
97
+ status TEXT DEFAULT 'pending',
98
+ started_at DATETIME,
99
+ completed_at DATETIME,
100
+ error_message TEXT,
101
+ agent_id TEXT,
102
+ FOREIGN KEY (plan_id) REFERENCES goap_plans (id),
103
+ FOREIGN KEY (action_id) REFERENCES goap_actions (id)
104
+ )
105
+ `);
106
+ // Create indexes if missing
107
+ try {
108
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_goap_execution_plan ON goap_execution_steps (plan_id)');
109
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_goap_execution_action ON goap_execution_steps (action_id)');
110
+ }
111
+ catch {
112
+ // Indexes may already exist
113
+ }
114
+ this.logger.debug('[GOAPPlanner] Schema ensured');
115
+ }
116
+ /**
117
+ * Seed actions to database (upsert - won't duplicate)
118
+ * Call this with allActions to persist the action library
119
+ */
120
+ seedActions(actions) {
121
+ this.ensureSchema();
122
+ const upsert = this.db.prepare(`
123
+ INSERT INTO goap_actions (
124
+ id, name, description, agent_type, preconditions, effects,
125
+ cost, duration_estimate, success_rate, execution_count, category, created_at
126
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
127
+ ON CONFLICT(id) DO UPDATE SET
128
+ name = excluded.name,
129
+ description = excluded.description,
130
+ agent_type = excluded.agent_type,
131
+ preconditions = excluded.preconditions,
132
+ effects = excluded.effects,
133
+ cost = excluded.cost,
134
+ duration_estimate = excluded.duration_estimate,
135
+ category = excluded.category,
136
+ updated_at = CURRENT_TIMESTAMP
137
+ `);
138
+ let seeded = 0;
139
+ const insertMany = this.db.transaction((actionsToSeed) => {
140
+ for (const action of actionsToSeed) {
141
+ upsert.run(action.id, action.name, action.description || null, action.agentType, JSON.stringify(action.preconditions), JSON.stringify(action.effects), action.cost, action.durationEstimate || null, action.successRate ?? 1.0, action.executionCount ?? 0, action.category);
142
+ seeded++;
143
+ }
144
+ });
145
+ insertMany(actions);
146
+ this.logger.info(`[GOAPPlanner] Seeded ${seeded} actions to database`);
147
+ return seeded;
148
+ }
149
+ /**
150
+ * Get action count from database
151
+ */
152
+ getActionCountFromDatabase() {
153
+ const result = this.db.prepare('SELECT COUNT(*) as count FROM goap_actions').get();
154
+ return result.count;
155
+ }
156
+ /**
157
+ * A* search to find optimal plan from current to goal state
158
+ */
159
+ async findPlan(currentState, goalConditions, constraints) {
160
+ await this.loadActionsFromDatabase();
161
+ const startTime = Date.now();
162
+ const openSet = [];
163
+ const closedSet = new Set();
164
+ // Start node
165
+ const startNode = {
166
+ state: this.cloneState(currentState),
167
+ gCost: 0,
168
+ hCost: this.calculateHeuristic(currentState, goalConditions),
169
+ fCost: 0,
170
+ action: null,
171
+ parent: null,
172
+ depth: 0
173
+ };
174
+ startNode.fCost = startNode.gCost + startNode.hCost;
175
+ openSet.push(startNode);
176
+ let iterations = 0;
177
+ const maxIterations = constraints?.maxIterations ?? 10000;
178
+ const timeoutMs = constraints?.timeoutMs ?? 5000;
179
+ const maxPlanLength = constraints?.maxPlanLength ?? 20;
180
+ while (openSet.length > 0 && iterations < maxIterations) {
181
+ iterations++;
182
+ // Check timeout
183
+ if (Date.now() - startTime > timeoutMs) {
184
+ this.logger.warn('[GOAPPlanner] Planning timeout exceeded', {
185
+ timeoutMs,
186
+ iterations,
187
+ elapsed: Date.now() - startTime
188
+ });
189
+ break;
190
+ }
191
+ // Get node with lowest fCost
192
+ openSet.sort((a, b) => a.fCost - b.fCost);
193
+ const current = openSet.shift();
194
+ // Check if goal reached
195
+ if (this.goalMet(current.state, goalConditions)) {
196
+ const plan = this.reconstructPlan(current, goalConditions);
197
+ this.logger.info('[GOAPPlanner] Plan found', {
198
+ iterations,
199
+ actions: plan.actions.length,
200
+ totalCost: plan.totalCost,
201
+ elapsedMs: Date.now() - startTime
202
+ });
203
+ return plan;
204
+ }
205
+ // Check max depth
206
+ if (current.depth >= maxPlanLength) {
207
+ continue;
208
+ }
209
+ const stateKey = this.stateHash(current.state);
210
+ if (closedSet.has(stateKey)) {
211
+ continue;
212
+ }
213
+ closedSet.add(stateKey);
214
+ // Expand neighbors (applicable actions)
215
+ const applicableActions = this.getApplicableActions(current.state, constraints);
216
+ for (const action of applicableActions) {
217
+ const nextState = this.applyAction(current.state, action);
218
+ const nextStateKey = this.stateHash(nextState);
219
+ if (closedSet.has(nextStateKey))
220
+ continue;
221
+ const gCost = current.gCost + this.getActionCost(action, current.state);
222
+ const hCost = this.calculateHeuristic(nextState, goalConditions);
223
+ const existingNode = openSet.find(n => this.stateHash(n.state) === nextStateKey);
224
+ if (!existingNode || gCost < existingNode.gCost) {
225
+ const newNode = {
226
+ state: nextState,
227
+ gCost,
228
+ hCost,
229
+ fCost: gCost + hCost,
230
+ action,
231
+ parent: current,
232
+ depth: current.depth + 1
233
+ };
234
+ if (existingNode) {
235
+ Object.assign(existingNode, newNode);
236
+ }
237
+ else {
238
+ openSet.push(newNode);
239
+ }
240
+ }
241
+ }
242
+ }
243
+ this.logger.warn('[GOAPPlanner] No plan found', {
244
+ iterations,
245
+ closedSetSize: closedSet.size,
246
+ elapsedMs: Date.now() - startTime
247
+ });
248
+ return null;
249
+ }
250
+ /**
251
+ * Calculate heuristic distance to goal (admissible)
252
+ */
253
+ calculateHeuristic(state, goal) {
254
+ let distance = 0;
255
+ for (const [key, condition] of Object.entries(goal)) {
256
+ const currentValue = this.getStateValue(state, key);
257
+ const condObj = condition;
258
+ if (condObj.gte !== undefined) {
259
+ if (typeof currentValue === 'number' && currentValue < condObj.gte) {
260
+ distance += (condObj.gte - currentValue) / 100; // Normalize
261
+ }
262
+ }
263
+ if (condObj.gt !== undefined) {
264
+ if (typeof currentValue === 'number' && currentValue <= condObj.gt) {
265
+ distance += (condObj.gt - currentValue + 1) / 100;
266
+ }
267
+ }
268
+ if (condObj.lte !== undefined) {
269
+ if (typeof currentValue === 'number' && currentValue > condObj.lte) {
270
+ distance += (currentValue - condObj.lte) / 100;
271
+ }
272
+ }
273
+ if (condObj.lt !== undefined) {
274
+ if (typeof currentValue === 'number' && currentValue >= condObj.lt) {
275
+ distance += (currentValue - condObj.lt + 1) / 100;
276
+ }
277
+ }
278
+ if (condObj.eq !== undefined) {
279
+ if (currentValue !== condObj.eq) {
280
+ distance += 1;
281
+ }
282
+ }
283
+ if (condObj.ne !== undefined) {
284
+ if (currentValue === condObj.ne) {
285
+ distance += 1;
286
+ }
287
+ }
288
+ if (condObj.contains !== undefined) {
289
+ if (Array.isArray(currentValue) && !currentValue.includes(condObj.contains)) {
290
+ distance += 1;
291
+ }
292
+ }
293
+ if (condObj.exists !== undefined) {
294
+ const exists = currentValue !== undefined && currentValue !== null;
295
+ if (condObj.exists !== exists) {
296
+ distance += 1;
297
+ }
298
+ }
299
+ }
300
+ return distance;
301
+ }
302
+ /**
303
+ * Check if goal conditions are met
304
+ */
305
+ goalMet(state, goal) {
306
+ return this.conditionsMet(state, goal);
307
+ }
308
+ /**
309
+ * Check if all conditions are satisfied
310
+ */
311
+ conditionsMet(state, conditions) {
312
+ for (const [key, condition] of Object.entries(conditions)) {
313
+ if (!this.checkCondition(state, key, condition)) {
314
+ return false;
315
+ }
316
+ }
317
+ return true;
318
+ }
319
+ /**
320
+ * Check a single condition
321
+ */
322
+ checkCondition(state, key, condition) {
323
+ const value = this.getStateValue(state, key);
324
+ if (condition.gte !== undefined && (typeof value !== 'number' || value < condition.gte)) {
325
+ return false;
326
+ }
327
+ if (condition.gt !== undefined && (typeof value !== 'number' || value <= condition.gt)) {
328
+ return false;
329
+ }
330
+ if (condition.lte !== undefined && (typeof value !== 'number' || value > condition.lte)) {
331
+ return false;
332
+ }
333
+ if (condition.lt !== undefined && (typeof value !== 'number' || value >= condition.lt)) {
334
+ return false;
335
+ }
336
+ if (condition.eq !== undefined && value !== condition.eq) {
337
+ return false;
338
+ }
339
+ if (condition.ne !== undefined && value === condition.ne) {
340
+ return false;
341
+ }
342
+ if (condition.contains !== undefined) {
343
+ if (!Array.isArray(value) || !value.includes(condition.contains)) {
344
+ return false;
345
+ }
346
+ }
347
+ if (condition.exists !== undefined) {
348
+ const exists = value !== undefined && value !== null;
349
+ if (condition.exists !== exists) {
350
+ return false;
351
+ }
352
+ }
353
+ if (condition.in !== undefined) {
354
+ if (!condition.in.includes(value)) {
355
+ return false;
356
+ }
357
+ }
358
+ return true;
359
+ }
360
+ /**
361
+ * Check if action preconditions are met
362
+ */
363
+ preconditionsMet(state, preconditions) {
364
+ return this.conditionsMet(state, preconditions);
365
+ }
366
+ /**
367
+ * Get actions whose preconditions are satisfied
368
+ */
369
+ getApplicableActions(state, constraints) {
370
+ return this.actionLibrary.filter(action => {
371
+ // Check preconditions
372
+ if (!this.preconditionsMet(state, action.preconditions)) {
373
+ return false;
374
+ }
375
+ // Check category constraints
376
+ if (constraints?.allowedCategories) {
377
+ if (!constraints.allowedCategories.includes(action.category)) {
378
+ return false;
379
+ }
380
+ }
381
+ // Check excluded actions
382
+ if (constraints?.excludedActions) {
383
+ if (constraints.excludedActions.includes(action.id)) {
384
+ return false;
385
+ }
386
+ }
387
+ // Check preferred agent types (boost, don't exclude)
388
+ // This is handled in cost calculation instead
389
+ return true;
390
+ });
391
+ }
392
+ /**
393
+ * Calculate effective action cost
394
+ */
395
+ getActionCost(action, state) {
396
+ let cost = action.cost;
397
+ // Adjust based on success rate (prefer reliable actions)
398
+ if (action.successRate !== undefined && action.successRate < 1) {
399
+ cost = cost / action.successRate;
400
+ }
401
+ // Adjust for critical risk level (increase cost of risky actions)
402
+ if (state.context.riskLevel === 'critical') {
403
+ if (action.category === 'process') {
404
+ cost *= 2; // Discourage process shortcuts in critical situations
405
+ }
406
+ }
407
+ return cost;
408
+ }
409
+ /**
410
+ * Apply action effects to state
411
+ */
412
+ applyAction(state, action) {
413
+ const newState = this.cloneState(state);
414
+ for (const [key, effect] of Object.entries(action.effects)) {
415
+ this.applyEffect(newState, key, effect);
416
+ }
417
+ return newState;
418
+ }
419
+ /**
420
+ * Apply a single effect to state
421
+ */
422
+ applyEffect(state, key, effect) {
423
+ if (effect.set !== undefined) {
424
+ this.setStateValue(state, key, effect.set);
425
+ }
426
+ if (effect.increase !== undefined) {
427
+ const current = this.getStateValue(state, key) ?? 0;
428
+ if (typeof current === 'number') {
429
+ this.setStateValue(state, key, Math.min(100, current + effect.increase));
430
+ }
431
+ }
432
+ if (effect.decrease !== undefined) {
433
+ const current = this.getStateValue(state, key) ?? 0;
434
+ if (typeof current === 'number') {
435
+ this.setStateValue(state, key, Math.max(0, current - effect.decrease));
436
+ }
437
+ }
438
+ if (effect.increment !== undefined) {
439
+ const current = this.getStateValue(state, key) ?? 0;
440
+ if (typeof current === 'number') {
441
+ this.setStateValue(state, key, current + effect.increment);
442
+ }
443
+ }
444
+ if (effect.decrement !== undefined) {
445
+ const current = this.getStateValue(state, key) ?? 0;
446
+ if (typeof current === 'number') {
447
+ this.setStateValue(state, key, Math.max(0, current - effect.decrement));
448
+ }
449
+ }
450
+ if (effect.add !== undefined) {
451
+ const current = this.getStateValue(state, key) ?? [];
452
+ if (Array.isArray(current) && !current.includes(effect.add)) {
453
+ this.setStateValue(state, key, [...current, effect.add]);
454
+ }
455
+ }
456
+ if (effect.remove !== undefined) {
457
+ const current = this.getStateValue(state, key) ?? [];
458
+ if (Array.isArray(current)) {
459
+ this.setStateValue(state, key, current.filter(v => v !== effect.remove));
460
+ }
461
+ }
462
+ // NOTE: { update: 'measured' } was removed as it was a semantic hack
463
+ // that allowed the same action to repeat infinitely. We now use proper
464
+ // flag-based effects where measurement actions set boolean flags that
465
+ // enable improvement actions. This ensures each measurement action
466
+ // can only run once (precondition: flag == false, effect: flag = true).
467
+ }
468
+ /**
469
+ * Get value from nested state using dot notation
470
+ */
471
+ getStateValue(state, key) {
472
+ const parts = key.split('.');
473
+ let current = state;
474
+ for (const part of parts) {
475
+ if (current === undefined || current === null) {
476
+ return undefined;
477
+ }
478
+ current = current[part];
479
+ }
480
+ return current;
481
+ }
482
+ /**
483
+ * Set value in nested state using dot notation
484
+ */
485
+ setStateValue(state, key, value) {
486
+ const parts = key.split('.');
487
+ let current = state;
488
+ for (let i = 0; i < parts.length - 1; i++) {
489
+ const part = parts[i];
490
+ if (current[part] === undefined) {
491
+ current[part] = {};
492
+ }
493
+ current = current[part];
494
+ }
495
+ current[parts[parts.length - 1]] = value;
496
+ }
497
+ /**
498
+ * Create hash of state for deduplication
499
+ */
500
+ stateHash(state) {
501
+ // Hash all metrics that affect planning, including measurement flags
502
+ const key = {
503
+ coverage: state.coverage.line,
504
+ coverageMeasured: state.coverage.measured ?? false,
505
+ tests: state.quality.testsPassing,
506
+ testsMeasured: state.quality.testsMeasured ?? false,
507
+ integrationTested: state.quality.integrationTested ?? false,
508
+ security: state.quality.securityScore,
509
+ securityMeasured: state.quality.securityMeasured ?? false,
510
+ performance: state.quality.performanceScore,
511
+ performanceMeasured: state.quality.performanceMeasured ?? false,
512
+ complexityMeasured: state.quality.complexityMeasured ?? false,
513
+ gateEvaluated: state.quality.gateEvaluated ?? false,
514
+ gateStatus: state.quality.gateStatus,
515
+ agents: state.fleet.activeAgents,
516
+ availableTypes: state.fleet.availableAgents.sort().join(','),
517
+ time: Math.floor(state.resources.timeRemaining / 60) // Round to minutes
518
+ };
519
+ return JSON.stringify(key);
520
+ }
521
+ /**
522
+ * Deep clone world state
523
+ */
524
+ cloneState(state) {
525
+ return JSON.parse(JSON.stringify(state));
526
+ }
527
+ /**
528
+ * Reconstruct plan from goal node
529
+ */
530
+ reconstructPlan(goalNode, goalConditions) {
531
+ const actions = [];
532
+ let current = goalNode;
533
+ while (current && current.action) {
534
+ actions.unshift(current.action);
535
+ current = current.parent;
536
+ }
537
+ const planId = `plan-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
538
+ return {
539
+ id: planId,
540
+ actions,
541
+ totalCost: goalNode.gCost,
542
+ estimatedDuration: actions.reduce((sum, a) => sum + (a.durationEstimate ?? 0), 0),
543
+ goalConditions
544
+ };
545
+ }
546
+ /**
547
+ * Persist plan to database
548
+ */
549
+ async persistPlan(plan, initialState, goalId) {
550
+ try {
551
+ this.db.prepare(`
552
+ INSERT INTO goap_plans (
553
+ id, goal_id, initial_state, goal_state, action_sequence,
554
+ total_cost, estimated_duration, status, created_at
555
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', CURRENT_TIMESTAMP)
556
+ `).run(plan.id, goalId || null, JSON.stringify(initialState), JSON.stringify(plan.goalConditions), JSON.stringify(plan.actions.map(a => a.id)), plan.totalCost, plan.estimatedDuration);
557
+ this.logger.info('[GOAPPlanner] Plan persisted', { planId: plan.id });
558
+ }
559
+ catch (error) {
560
+ this.logger.error('[GOAPPlanner] Failed to persist plan', { planId: plan.id, error });
561
+ }
562
+ }
563
+ /**
564
+ * Update action success rate based on execution outcome
565
+ */
566
+ async updateActionSuccessRate(actionId, success) {
567
+ try {
568
+ const action = this.db.prepare(`
569
+ SELECT success_rate, execution_count FROM goap_actions WHERE id = ?
570
+ `).get(actionId);
571
+ if (!action)
572
+ return;
573
+ const newCount = action.execution_count + 1;
574
+ const newRate = (action.success_rate * action.execution_count + (success ? 1 : 0)) / newCount;
575
+ this.db.prepare(`
576
+ UPDATE goap_actions
577
+ SET success_rate = ?, execution_count = ?, updated_at = CURRENT_TIMESTAMP
578
+ WHERE id = ?
579
+ `).run(newRate, newCount, actionId);
580
+ // Update in-memory library
581
+ const memAction = this.actionLibrary.find(a => a.id === actionId);
582
+ if (memAction) {
583
+ memAction.successRate = newRate;
584
+ memAction.executionCount = newCount;
585
+ }
586
+ }
587
+ catch (error) {
588
+ this.logger.warn('[GOAPPlanner] Failed to update action success rate', { actionId, error });
589
+ }
590
+ }
591
+ /**
592
+ * Find alternative plans (for presenting options)
593
+ */
594
+ async findAlternativePlans(currentState, goalConditions, constraints, maxAlternatives = 3) {
595
+ const plans = [];
596
+ const usedActions = new Set();
597
+ for (let i = 0; i < maxAlternatives + 1; i++) {
598
+ const plan = await this.findPlan(currentState, goalConditions, {
599
+ ...constraints,
600
+ excludedActions: [...(constraints?.excludedActions || []), ...Array.from(usedActions)]
601
+ });
602
+ if (plan) {
603
+ plans.push(plan);
604
+ // Exclude first action of this plan for next iteration
605
+ if (plan.actions.length > 0) {
606
+ usedActions.add(plan.actions[0].id);
607
+ }
608
+ }
609
+ else {
610
+ break;
611
+ }
612
+ }
613
+ return plans;
614
+ }
615
+ }
616
+ exports.GOAPPlanner = GOAPPlanner;
617
+ /**
618
+ * Get shared GOAPPlanner instance
619
+ */
620
+ let sharedPlanner = null;
621
+ function getSharedGOAPPlanner(db) {
622
+ if (!sharedPlanner) {
623
+ sharedPlanner = new GOAPPlanner(db);
624
+ }
625
+ return sharedPlanner;
626
+ }
627
+ function resetSharedGOAPPlanner() {
628
+ sharedPlanner = null;
629
+ }
630
+ //# sourceMappingURL=GOAPPlanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GOAPPlanner.js","sourceRoot":"","sources":["../../src/planning/GOAPPlanner.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AA+uBH,oDAKC;AAED,wDAEC;AArvBD,4CAAyC;AAezC;;GAEG;AACH,MAAa,WAAW;IAMtB,YAAY,EAAqB;QALzB,kBAAa,GAAiB,EAAE,CAAC;QAGjC,kBAAa,GAAG,KAAK,CAAC;QAG5B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,eAAM,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB;QAC3B,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAE/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;OAE5B,CAAC,CAAC,GAAG,EAAwB,CAAC;YAE/B,yEAAyE;YACzE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI;iBACnB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBACvC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACX,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;gBACzC,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;gBAC5C,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;gBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,gBAAgB,EAAE,GAAG,CAAC,iBAAiB,IAAI,SAAS;gBACpD,WAAW,EAAE,GAAG,CAAC,YAAY;gBAC7B,cAAc,EAAE,GAAG,CAAC,eAAe;gBACnC,QAAQ,EAAE,GAAG,CAAC,QAAkC;aACjD,CAAC,CAAC,CAAC;YAEN,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,SAAS,CAAC,MAAM,kCAAkC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5H,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8EAA8E,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5G,4CAA4C;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAqB;QAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,yCAAyC;QACzC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;KAgBZ,CAAC,CAAC;QAEH,4BAA4B;QAC5B,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;YACrG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAC;QAC3G,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,OAAqB;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;KAe9B,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,aAA2B,EAAE,EAAE;YACrE,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,WAAW,IAAI,IAAI,EAC1B,MAAM,CAAC,SAAS,EAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,EACpC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,gBAAgB,IAAI,IAAI,EAC/B,MAAM,CAAC,WAAW,IAAI,GAAG,EACzB,MAAM,CAAC,cAAc,IAAI,CAAC,EAC1B,MAAM,CAAC,QAAQ,CAChB,CAAC;gBACF,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,sBAAsB,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,0BAA0B;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAAuB,CAAC;QACxG,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,YAAwB,EACxB,cAA+B,EAC/B,WAA6B;QAE7B,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,aAAa;QACb,MAAM,SAAS,GAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YACpC,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,cAAc,CAAC;YAC5D,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,CAAC;SACT,CAAC;QACF,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAExB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,aAAa,GAAG,WAAW,EAAE,aAAa,IAAI,KAAK,CAAC;QAC1D,MAAM,SAAS,GAAG,WAAW,EAAE,SAAS,IAAI,IAAI,CAAC;QACjD,MAAM,aAAa,GAAG,WAAW,EAAE,aAAa,IAAI,EAAE,CAAC;QAEvD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;YACxD,UAAU,EAAE,CAAC;YAEb,gBAAgB;YAChB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE;oBAC1D,SAAS;oBACT,UAAU;oBACV,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBAChC,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED,6BAA6B;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAG,CAAC;YAEjC,wBAAwB;YACxB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;gBAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;oBAC3C,UAAU;oBACV,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBAClC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;YAED,kBAAkB;YAClB,IAAI,OAAO,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;gBACnC,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAExB,wCAAwC;YACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAEhF,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAE/C,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;oBAAE,SAAS;gBAE1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxE,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;gBAEjE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,CAAC;gBAEjF,IAAI,CAAC,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;oBAChD,MAAM,OAAO,GAAa;wBACxB,KAAK,EAAE,SAAS;wBAChB,KAAK;wBACL,KAAK;wBACL,KAAK,EAAE,KAAK,GAAG,KAAK;wBACpB,MAAM;wBACN,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;qBACzB,CAAC;oBAEF,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAC9C,UAAU;YACV,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SAClC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAiB,EAAE,IAAqB;QACjE,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,SAA+B,CAAC;YAEhD,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBACnE,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY;gBAC9D,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;oBACnE,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBACnE,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACjD,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;oBACnE,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,YAAY,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;oBAChC,QAAQ,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,YAAY,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;oBAChC,QAAQ,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5E,QAAQ,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,CAAC;gBACnE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC9B,QAAQ,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAiB,EAAE,IAAqB;QAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAiB,EAAE,UAA2B;QAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,SAA+B,CAAC,EAAE,CAAC;gBACtE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAiB,EAAE,GAAW,EAAE,SAA6B;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE7C,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACxF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACxF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACvF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;YACrD,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,KAAiB,EAAE,aAA8B;QAChE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,oBAAoB,CAC1B,KAAiB,EACjB,WAA6B;QAE7B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACxC,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;gBACxD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,6BAA6B;YAC7B,IAAI,WAAW,EAAE,iBAAiB,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7D,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,yBAAyB;YACzB,IAAI,WAAW,EAAE,eAAe,EAAE,CAAC;gBACjC,IAAI,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;oBACpD,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,qDAAqD;YACrD,8CAA8C;YAE9C,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAkB,EAAE,KAAiB;QACzD,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAEvB,yDAAyD;QACzD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;QACnC,CAAC;QAED,kEAAkE;QAClE,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,CAAC,CAAC,sDAAsD;YACnE,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAiB,EAAE,MAAkB;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAExC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAyB,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAiB,EAAE,GAAW,EAAE,MAAuB;QACzE,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,qEAAqE;QACrE,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,wEAAwE;IAC1E,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAiB,EAAE,GAAW;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAQ,KAAK,CAAC;QAEzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC9C,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAiB,EAAE,GAAW,EAAE,KAAU;QAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAQ,KAAK,CAAC;QAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,KAAiB;QACjC,qEAAqE;QACrE,MAAM,GAAG,GAAG;YACV,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;YAC7B,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,KAAK;YAClD,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;YACjC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK;YACnD,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,IAAI,KAAK;YAC3D,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa;YACrC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,KAAK;YACzD,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB;YAC3C,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,IAAI,KAAK;YAC/D,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB,IAAI,KAAK;YAC7D,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK;YACnD,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;YACpC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY;YAChC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5D,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,mBAAmB;SACzE,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,KAAiB;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,eAAe,CACrB,QAAkB,EAClB,cAA+B;QAE/B,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,IAAI,OAAO,GAAoB,QAAQ,CAAC;QAExC,OAAO,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAElF,OAAO;YACL,EAAE,EAAE,MAAM;YACV,OAAO;YACP,SAAS,EAAE,QAAQ,CAAC,KAAK;YACzB,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACjF,cAAc;SACf,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,YAAwB,EAAE,MAAe;QACzE,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAKf,CAAC,CAAC,GAAG,CACJ,IAAI,CAAC,EAAE,EACP,MAAM,IAAI,IAAI,EACd,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3C,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,iBAAiB,CACvB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAAC,QAAgB,EAAE,OAAgB;QAC9D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;OAE9B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAkE,CAAC;YAElF,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,eAAe,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;YAE9F,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAIf,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEpC,2BAA2B;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAClE,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC;gBAChC,SAAS,CAAC,cAAc,GAAG,QAAQ,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,YAAwB,EACxB,cAA+B,EAC/B,WAA6B,EAC7B,eAAe,GAAG,CAAC;QAEnB,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE;gBAC7D,GAAG,WAAW;gBACd,eAAe,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACvF,CAAC,CAAC;YAEH,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,uDAAuD;gBACvD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAntBD,kCAmtBC;AAED;;GAEG;AACH,IAAI,aAAa,GAAuB,IAAI,CAAC;AAE7C,SAAgB,oBAAoB,CAAC,EAAqB;IACxD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAgB,sBAAsB;IACpC,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC"}