@gridlock/orchestrator 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/LICENSE +21 -0
  2. package/dist/AgentRoute.d.ts +44 -0
  3. package/dist/AgentRoute.d.ts.map +1 -0
  4. package/dist/AgentRoute.js +54 -0
  5. package/dist/AgentRoute.js.map +1 -0
  6. package/dist/CommandRegistry.d.ts +68 -0
  7. package/dist/CommandRegistry.d.ts.map +1 -0
  8. package/dist/CommandRegistry.js +87 -0
  9. package/dist/CommandRegistry.js.map +1 -0
  10. package/dist/ContextFactory.d.ts +62 -0
  11. package/dist/ContextFactory.d.ts.map +1 -0
  12. package/dist/ContextFactory.js +59 -0
  13. package/dist/ContextFactory.js.map +1 -0
  14. package/dist/DialogueGate.d.ts +117 -0
  15. package/dist/DialogueGate.d.ts.map +1 -0
  16. package/dist/DialogueGate.js +101 -0
  17. package/dist/DialogueGate.js.map +1 -0
  18. package/dist/DisclosureEngine.d.ts +160 -0
  19. package/dist/DisclosureEngine.d.ts.map +1 -0
  20. package/dist/DisclosureEngine.js +241 -0
  21. package/dist/DisclosureEngine.js.map +1 -0
  22. package/dist/EvidenceGraph.d.ts +71 -0
  23. package/dist/EvidenceGraph.d.ts.map +1 -0
  24. package/dist/EvidenceGraph.js +177 -0
  25. package/dist/EvidenceGraph.js.map +1 -0
  26. package/dist/InteractionEvaluator.d.ts +50 -0
  27. package/dist/InteractionEvaluator.d.ts.map +1 -0
  28. package/dist/InteractionEvaluator.js +205 -0
  29. package/dist/InteractionEvaluator.js.map +1 -0
  30. package/dist/KnowledgeBoundary.d.ts +74 -0
  31. package/dist/KnowledgeBoundary.d.ts.map +1 -0
  32. package/dist/KnowledgeBoundary.js +76 -0
  33. package/dist/KnowledgeBoundary.js.map +1 -0
  34. package/dist/evaluation/EscalationClock.d.ts +65 -0
  35. package/dist/evaluation/EscalationClock.d.ts.map +1 -0
  36. package/dist/evaluation/EscalationClock.js +106 -0
  37. package/dist/evaluation/EscalationClock.js.map +1 -0
  38. package/dist/evaluation/PerformanceEvaluator.d.ts +54 -0
  39. package/dist/evaluation/PerformanceEvaluator.d.ts.map +1 -0
  40. package/dist/evaluation/PerformanceEvaluator.js +161 -0
  41. package/dist/evaluation/PerformanceEvaluator.js.map +1 -0
  42. package/dist/evaluation/WorldState.d.ts +30 -0
  43. package/dist/evaluation/WorldState.d.ts.map +1 -0
  44. package/dist/evaluation/WorldState.js +43 -0
  45. package/dist/evaluation/WorldState.js.map +1 -0
  46. package/dist/evaluation/index.d.ts +8 -0
  47. package/dist/evaluation/index.d.ts.map +1 -0
  48. package/dist/evaluation/index.js +4 -0
  49. package/dist/evaluation/index.js.map +1 -0
  50. package/dist/evaluation/types.d.ts +26 -0
  51. package/dist/evaluation/types.d.ts.map +1 -0
  52. package/dist/evaluation/types.js +9 -0
  53. package/dist/evaluation/types.js.map +1 -0
  54. package/dist/handlers/AssistantCommandRegistry.d.ts +55 -0
  55. package/dist/handlers/AssistantCommandRegistry.d.ts.map +1 -0
  56. package/dist/handlers/AssistantCommandRegistry.js +59 -0
  57. package/dist/handlers/AssistantCommandRegistry.js.map +1 -0
  58. package/dist/handlers/EvidenceIngestion.d.ts +64 -0
  59. package/dist/handlers/EvidenceIngestion.d.ts.map +1 -0
  60. package/dist/handlers/EvidenceIngestion.js +114 -0
  61. package/dist/handlers/EvidenceIngestion.js.map +1 -0
  62. package/dist/handlers/GameLifecycle.d.ts +71 -0
  63. package/dist/handlers/GameLifecycle.d.ts.map +1 -0
  64. package/dist/handlers/GameLifecycle.js +100 -0
  65. package/dist/handlers/GameLifecycle.js.map +1 -0
  66. package/dist/handlers/GraphPopulation.d.ts +24 -0
  67. package/dist/handlers/GraphPopulation.d.ts.map +1 -0
  68. package/dist/handlers/GraphPopulation.js +21 -0
  69. package/dist/handlers/GraphPopulation.js.map +1 -0
  70. package/dist/handlers/ResolutionGate.d.ts +60 -0
  71. package/dist/handlers/ResolutionGate.d.ts.map +1 -0
  72. package/dist/handlers/ResolutionGate.js +49 -0
  73. package/dist/handlers/ResolutionGate.js.map +1 -0
  74. package/dist/index.d.ts +53 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +54 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/investigation/Analyst.d.ts +80 -0
  79. package/dist/investigation/Analyst.d.ts.map +1 -0
  80. package/dist/investigation/Analyst.js +514 -0
  81. package/dist/investigation/Analyst.js.map +1 -0
  82. package/dist/investigation/AnalystWorkspace.d.ts +182 -0
  83. package/dist/investigation/AnalystWorkspace.d.ts.map +1 -0
  84. package/dist/investigation/AnalystWorkspace.js +405 -0
  85. package/dist/investigation/AnalystWorkspace.js.map +1 -0
  86. package/dist/investigation/CaseFile.d.ts +92 -0
  87. package/dist/investigation/CaseFile.d.ts.map +1 -0
  88. package/dist/investigation/CaseFile.js +117 -0
  89. package/dist/investigation/CaseFile.js.map +1 -0
  90. package/dist/investigation/DiscoveryLayer.d.ts +133 -0
  91. package/dist/investigation/DiscoveryLayer.d.ts.map +1 -0
  92. package/dist/investigation/DiscoveryLayer.js +176 -0
  93. package/dist/investigation/DiscoveryLayer.js.map +1 -0
  94. package/dist/investigation/FactLedger.d.ts +91 -0
  95. package/dist/investigation/FactLedger.d.ts.map +1 -0
  96. package/dist/investigation/FactLedger.js +185 -0
  97. package/dist/investigation/FactLedger.js.map +1 -0
  98. package/dist/investigation/InvestigationTimeline.d.ts +98 -0
  99. package/dist/investigation/InvestigationTimeline.d.ts.map +1 -0
  100. package/dist/investigation/InvestigationTimeline.js +178 -0
  101. package/dist/investigation/InvestigationTimeline.js.map +1 -0
  102. package/dist/investigation/ProfileEngine.d.ts +84 -0
  103. package/dist/investigation/ProfileEngine.d.ts.map +1 -0
  104. package/dist/investigation/ProfileEngine.js +170 -0
  105. package/dist/investigation/ProfileEngine.js.map +1 -0
  106. package/dist/investigation/WorkspaceProjections.d.ts +94 -0
  107. package/dist/investigation/WorkspaceProjections.d.ts.map +1 -0
  108. package/dist/investigation/WorkspaceProjections.js +92 -0
  109. package/dist/investigation/WorkspaceProjections.js.map +1 -0
  110. package/dist/investigation/index.d.ts +18 -0
  111. package/dist/investigation/index.d.ts.map +1 -0
  112. package/dist/investigation/index.js +10 -0
  113. package/dist/investigation/index.js.map +1 -0
  114. package/dist/investigation/types.d.ts +206 -0
  115. package/dist/investigation/types.d.ts.map +1 -0
  116. package/dist/investigation/types.js +20 -0
  117. package/dist/investigation/types.js.map +1 -0
  118. package/dist/types.d.ts +283 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/types.js +70 -0
  121. package/dist/types.js.map +1 -0
  122. package/package.json +48 -0
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Analyst Engine (#169, #333–#338, #415, #417)
3
+ *
4
+ * Structured analytical engine that reads DiscoveryLayer data and
5
+ * produces typed AnalyticalOutput objects for player guidance.
6
+ *
7
+ * Behaviour invariants:
8
+ * 1. Never asserts guilt or innocence
9
+ * 2. Scoped to discovery — only references what player has found
10
+ * 3. Asks, doesn't answer — questions, not conclusions
11
+ * 4. Tolerates ambiguity — names tension, not resolution
12
+ * 5. Auditable — traces to entities/relationships
13
+ * 6. Quiet when uncertain — _scoreConfidence tags low-confidence outputs;
14
+ * presentation layer filters or de-emphasises them
15
+ *
16
+ * Engine-generic: operates on FactRecords and Findings from the
17
+ * DiscoveryLayer. No product vocabulary.
18
+ *
19
+ * MS-28 #887 — Phase 1.2 — Orchestrator migration step 5.9.
20
+ */
21
+ import type { DiscoveryLayer } from './DiscoveryLayer.js';
22
+ import type { Finding } from '@gridlock/validators';
23
+ export type AnalyticalOutputType = 'pattern' | 'anomaly' | 'hypothesis' | 'gap' | 'prompt' | 'bridge';
24
+ export type AnalyticalConfidence = 'low' | 'medium' | 'high';
25
+ export interface AnalyticalOutput {
26
+ type: AnalyticalOutputType;
27
+ confidence: AnalyticalConfidence;
28
+ entities: string[];
29
+ relationships: string[];
30
+ narrative: string;
31
+ suggestedActions?: string[];
32
+ }
33
+ export type HypothesisStatus = 'active' | 'supported' | 'weakened' | 'contradicted';
34
+ export interface AnalyticalHypothesis {
35
+ id: string;
36
+ statement: string;
37
+ entityA: string;
38
+ entityB?: string;
39
+ confidence: AnalyticalConfidence;
40
+ status: HypothesisStatus;
41
+ evidenceBasis: string[];
42
+ }
43
+ /**
44
+ * ACH-style hypothesis comparison (#415).
45
+ * Ranks hypotheses by "least contradicted" — not "most supported".
46
+ */
47
+ export interface HypothesisComparison {
48
+ hypothesis: AnalyticalHypothesis;
49
+ supportingEvidence: number;
50
+ contradictingEvidence: number;
51
+ tension: 'low' | 'medium' | 'high';
52
+ supportingDetails: string[];
53
+ contradictingDetails: string[];
54
+ }
55
+ export declare class Analyst {
56
+ private discoveryLayer;
57
+ private findings;
58
+ private hypotheses;
59
+ constructor(discoveryLayer: DiscoveryLayer, findings: Finding[]);
60
+ /**
61
+ * Run full analysis and return all outputs above confidence threshold.
62
+ */
63
+ analyse(): AnalyticalOutput[];
64
+ private _scoreConfidence;
65
+ detectPatterns(): AnalyticalOutput[];
66
+ detectAnomalies(): AnalyticalOutput[];
67
+ detectGaps(): AnalyticalOutput[];
68
+ generateHypotheses(): AnalyticalHypothesis[];
69
+ updateHypotheses(): void;
70
+ getHypotheses(): AnalyticalHypothesis[];
71
+ compareHypotheses(): HypothesisComparison[];
72
+ generatePrompts(): AnalyticalOutput[];
73
+ detectBridges(): AnalyticalOutput[];
74
+ private _findCoOccurrences;
75
+ private _findTemporalClusters;
76
+ private _extractTime;
77
+ private _extractTimes;
78
+ private _timeDiffMinutes;
79
+ }
80
+ //# sourceMappingURL=Analyst.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Analyst.d.ts","sourceRoot":"","sources":["../../src/investigation/Analyst.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAOpD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACtG,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,oBAAoB,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;AAEpF,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,oBAAoB,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,OAAO,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAMD,qBAAa,OAAO;IAIhB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ;IAJlB,OAAO,CAAC,UAAU,CAA8B;gBAGtC,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,OAAO,EAAE;IAK7B;;OAEG;IACH,OAAO,IAAI,gBAAgB,EAAE;IAyB7B,OAAO,CAAC,gBAAgB;IASxB,cAAc,IAAI,gBAAgB,EAAE;IAyDpC,eAAe,IAAI,gBAAgB,EAAE;IAwDrC,UAAU,IAAI,gBAAgB,EAAE;IAmChC,kBAAkB,IAAI,oBAAoB,EAAE;IAgD5C,gBAAgB,IAAI,IAAI;IA2BxB,aAAa,IAAI,oBAAoB,EAAE;IAMvC,iBAAiB,IAAI,oBAAoB,EAAE;IAsD3C,eAAe,IAAI,gBAAgB,EAAE;IA+CrC,aAAa,IAAI,gBAAgB,EAAE;IA2FnC,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,qBAAqB;IA4B7B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,gBAAgB;CAKzB"}
@@ -0,0 +1,514 @@
1
+ /**
2
+ * Analyst Engine (#169, #333–#338, #415, #417)
3
+ *
4
+ * Structured analytical engine that reads DiscoveryLayer data and
5
+ * produces typed AnalyticalOutput objects for player guidance.
6
+ *
7
+ * Behaviour invariants:
8
+ * 1. Never asserts guilt or innocence
9
+ * 2. Scoped to discovery — only references what player has found
10
+ * 3. Asks, doesn't answer — questions, not conclusions
11
+ * 4. Tolerates ambiguity — names tension, not resolution
12
+ * 5. Auditable — traces to entities/relationships
13
+ * 6. Quiet when uncertain — _scoreConfidence tags low-confidence outputs;
14
+ * presentation layer filters or de-emphasises them
15
+ *
16
+ * Engine-generic: operates on FactRecords and Findings from the
17
+ * DiscoveryLayer. No product vocabulary.
18
+ *
19
+ * MS-28 #887 — Phase 1.2 — Orchestrator migration step 5.9.
20
+ */
21
+ import { getRelatedByType, getEntities } from '@gridlock/validators';
22
+ // ---------------------------------------------------------------------------
23
+ // Analyst Engine
24
+ // ---------------------------------------------------------------------------
25
+ export class Analyst {
26
+ discoveryLayer;
27
+ findings;
28
+ hypotheses = [];
29
+ constructor(discoveryLayer, findings) {
30
+ this.discoveryLayer = discoveryLayer;
31
+ this.findings = findings;
32
+ }
33
+ // --- Core Analysis (#333) ---
34
+ /**
35
+ * Run full analysis and return all outputs above confidence threshold.
36
+ */
37
+ analyse() {
38
+ const outputs = [];
39
+ outputs.push(...this.detectPatterns());
40
+ outputs.push(...this.detectAnomalies());
41
+ outputs.push(...this.detectGaps());
42
+ outputs.push(...this.detectBridges());
43
+ this.updateHypotheses();
44
+ outputs.push(...this.generatePrompts());
45
+ for (const h of this.hypotheses) {
46
+ outputs.push({
47
+ type: 'hypothesis',
48
+ confidence: h.confidence,
49
+ entities: [h.entityA, ...(h.entityB ? [h.entityB] : [])],
50
+ relationships: [],
51
+ narrative: `${h.statement} [${h.status}]`,
52
+ });
53
+ }
54
+ return outputs;
55
+ }
56
+ // --- Confidence Scoring (#334) ---
57
+ _scoreConfidence(factCount, sourceCount, hasValidatorSupport) {
58
+ if (hasValidatorSupport || (factCount >= 3 && sourceCount >= 2))
59
+ return 'high';
60
+ if (factCount >= 2 || sourceCount >= 2)
61
+ return 'medium';
62
+ if (factCount >= 1)
63
+ return 'low';
64
+ return 'low';
65
+ }
66
+ // --- Pattern Detection (#335) ---
67
+ detectPatterns() {
68
+ const patterns = [];
69
+ const facts = this.discoveryLayer.getDiscoveredFacts();
70
+ const relationships = this.discoveryLayer.getDiscoveredRelationships();
71
+ // Entity co-occurrence
72
+ const coOccurrences = this._findCoOccurrences(facts);
73
+ for (const [pair, count] of coOccurrences) {
74
+ if (count >= 2) {
75
+ const [a, b] = pair.split('|');
76
+ patterns.push({
77
+ type: 'pattern',
78
+ confidence: this._scoreConfidence(count, 2, false),
79
+ entities: [a, b],
80
+ relationships: [],
81
+ narrative: `${a} and ${b} appear together across ${count} pieces of evidence.`,
82
+ });
83
+ }
84
+ }
85
+ // Temporal clusters
86
+ const timeClusters = this._findTemporalClusters(facts);
87
+ for (const cluster of timeClusters) {
88
+ if (cluster.facts.length >= 2) {
89
+ const subjects = [...new Set(cluster.facts.map(f => f.subject))];
90
+ patterns.push({
91
+ type: 'pattern',
92
+ confidence: this._scoreConfidence(cluster.facts.length, subjects.length, false),
93
+ entities: subjects,
94
+ relationships: [],
95
+ narrative: `${cluster.facts.length} facts cluster around ${cluster.time}. Subjects: ${subjects.join(', ')}.`,
96
+ });
97
+ }
98
+ }
99
+ // Repeated relationship types
100
+ const relCounts = new Map();
101
+ for (const rel of relationships) {
102
+ relCounts.set(rel.relationship, (relCounts.get(rel.relationship) ?? 0) + 1);
103
+ }
104
+ for (const [relType, count] of relCounts) {
105
+ if (count >= 3) {
106
+ patterns.push({
107
+ type: 'pattern',
108
+ confidence: 'medium',
109
+ entities: [],
110
+ relationships: [relType],
111
+ narrative: `The relationship '${relType}' appears ${count} times in the evidence graph.`,
112
+ });
113
+ }
114
+ }
115
+ return patterns;
116
+ }
117
+ // --- Anomaly Detection (#336) ---
118
+ detectAnomalies() {
119
+ const anomalies = [];
120
+ const facts = this.discoveryLayer.getDiscoveredFacts();
121
+ const entities = this.discoveryLayer.getDiscoveredEntities();
122
+ // Entities with facts but no contradictions
123
+ const subjectsWithFacts = new Set(facts.map(f => f.subject));
124
+ const subjectsWithContradictions = new Set(this.findings.filter(f => f.kind === 'contradiction').flatMap(f => getRelatedByType(f.relatedEntities, 'character')));
125
+ for (const subject of subjectsWithFacts) {
126
+ if (!subjectsWithContradictions.has(subject) && facts.filter(f => f.subject === subject).length >= 2) {
127
+ anomalies.push({
128
+ type: 'anomaly',
129
+ confidence: 'low',
130
+ entities: [subject],
131
+ relationships: [],
132
+ narrative: `${subject} has evidence but no contradictions detected. This could indicate consistency — or undiscovered conflicts.`,
133
+ });
134
+ }
135
+ }
136
+ // Contradiction findings
137
+ for (const finding of this.findings) {
138
+ if (finding.kind === 'contradiction') {
139
+ const subjects = getRelatedByType(finding.relatedEntities, 'character');
140
+ anomalies.push({
141
+ type: 'anomaly',
142
+ confidence: 'high',
143
+ entities: subjects,
144
+ relationships: [],
145
+ narrative: `Contradiction: ${finding.text}`,
146
+ });
147
+ }
148
+ }
149
+ // Entities discovered but with zero facts
150
+ for (const entity of entities) {
151
+ const entityFacts = facts.filter(f => f.subject === entity.id || f.relatedEntities?.some(e => e.id === entity.id));
152
+ if (entityFacts.length === 0) {
153
+ anomalies.push({
154
+ type: 'anomaly',
155
+ confidence: 'low',
156
+ entities: [entity.id],
157
+ relationships: [],
158
+ narrative: `${entity.name} is known but has no recorded evidence. Consider further inquiry.`,
159
+ suggestedActions: [`Interact with ${entity.name}`, `Look for artifacts mentioning ${entity.name}`],
160
+ });
161
+ }
162
+ }
163
+ return anomalies;
164
+ }
165
+ // --- Gap Detection ---
166
+ detectGaps() {
167
+ const gaps = [];
168
+ const facts = this.discoveryLayer.getDiscoveredFacts();
169
+ const bySubject = new Map();
170
+ for (const fact of facts) {
171
+ if (!bySubject.has(fact.subject))
172
+ bySubject.set(fact.subject, []);
173
+ bySubject.get(fact.subject).push(fact);
174
+ }
175
+ for (const [subject, subjectFacts] of bySubject) {
176
+ const times = this._extractTimes(subjectFacts);
177
+ if (times.length >= 2) {
178
+ times.sort();
179
+ for (let i = 0; i < times.length - 1; i++) {
180
+ const diff = this._timeDiffMinutes(times[i], times[i + 1]);
181
+ if (diff > 60) {
182
+ gaps.push({
183
+ type: 'gap',
184
+ confidence: 'medium',
185
+ entities: [subject],
186
+ relationships: [],
187
+ narrative: `No activity recorded for ${subject} between ${times[i]} and ${times[i + 1]}.`,
188
+ suggestedActions: [`Look for evidence about ${subject} during this period`],
189
+ });
190
+ }
191
+ }
192
+ }
193
+ }
194
+ return gaps;
195
+ }
196
+ // --- Hypothesis Generation & Lifecycle (#337) ---
197
+ generateHypotheses() {
198
+ const facts = this.discoveryLayer.getDiscoveredFacts();
199
+ const existingIds = new Set(this.hypotheses.map(h => h.id));
200
+ for (const finding of this.findings) {
201
+ if (finding.kind === 'contradiction') {
202
+ const id = `hyp-${finding.id}`;
203
+ if (existingIds.has(id))
204
+ continue;
205
+ const subjects = getRelatedByType(finding.relatedEntities, 'character');
206
+ this.hypotheses.push({
207
+ id,
208
+ statement: `${subjects[0] ?? 'An entity'} may have provided false information regarding: ${finding.text}`,
209
+ entityA: subjects[0] ?? 'unknown',
210
+ entityB: subjects[1],
211
+ confidence: 'medium',
212
+ status: 'active',
213
+ evidenceBasis: [finding.id],
214
+ });
215
+ }
216
+ }
217
+ const coOccurrences = this._findCoOccurrences(facts);
218
+ for (const [pair, count] of coOccurrences) {
219
+ if (count >= 2) {
220
+ const [a, b] = pair.split('|');
221
+ const id = `hyp-cooccur-${a}-${b}`;
222
+ if (existingIds.has(id))
223
+ continue;
224
+ this.hypotheses.push({
225
+ id,
226
+ statement: `${a} and ${b} may be connected — they appear together in ${count} pieces of evidence.`,
227
+ entityA: a,
228
+ entityB: b,
229
+ confidence: count >= 3 ? 'medium' : 'low',
230
+ status: 'active',
231
+ evidenceBasis: facts.filter(f => (f.subject === a && f.relatedEntities?.some(e => e.id === b)) ||
232
+ (f.subject === b && f.relatedEntities?.some(e => e.id === a)) ||
233
+ (f.entityRefs?.includes(a) && f.entityRefs?.includes(b))).map(f => f.id),
234
+ });
235
+ }
236
+ }
237
+ return this.hypotheses;
238
+ }
239
+ updateHypotheses() {
240
+ this.generateHypotheses();
241
+ for (const h of this.hypotheses) {
242
+ if (h.status === 'contradicted')
243
+ continue;
244
+ const relatedContradictions = this.findings.filter(f => f.kind === 'contradiction' &&
245
+ (f.relatedEntities.some(e => e.id === h.entityA) || (h.entityB && f.relatedEntities.some(e => e.id === h.entityB))));
246
+ const relatedSupport = this.findings.filter(f => f.kind === 'support' &&
247
+ (f.relatedEntities.some(e => e.id === h.entityA) || (h.entityB && f.relatedEntities.some(e => e.id === h.entityB))));
248
+ if (relatedContradictions.length > h.evidenceBasis.length) {
249
+ h.status = 'weakened';
250
+ h.confidence = 'low';
251
+ }
252
+ if (relatedSupport.length > 0 && h.status === 'active') {
253
+ h.status = 'supported';
254
+ h.confidence = 'medium';
255
+ }
256
+ }
257
+ }
258
+ getHypotheses() {
259
+ return [...this.hypotheses];
260
+ }
261
+ // --- Hypothesis Comparison / ACH (#415) ---
262
+ compareHypotheses() {
263
+ this.updateHypotheses();
264
+ const facts = this.discoveryLayer.getDiscoveredFacts();
265
+ const comparisons = [];
266
+ for (const h of this.hypotheses) {
267
+ if (h.status === 'contradicted')
268
+ continue;
269
+ const entityIds = [h.entityA, ...(h.entityB ? [h.entityB] : [])];
270
+ const supporting = [];
271
+ const contradicting = [];
272
+ for (const finding of this.findings) {
273
+ const involvesEntity = entityIds.some(id => finding.relatedEntities.some(e => e.id === id));
274
+ if (!involvesEntity)
275
+ continue;
276
+ if (finding.kind === 'contradiction') {
277
+ supporting.push(finding.text);
278
+ }
279
+ else if (finding.kind === 'support') {
280
+ contradicting.push(finding.text);
281
+ }
282
+ }
283
+ for (const fact of facts) {
284
+ if (!entityIds.includes(fact.subject))
285
+ continue;
286
+ if (fact.status === 'supported') {
287
+ contradicting.push(fact.statement);
288
+ }
289
+ }
290
+ const contradictingCount = contradicting.length;
291
+ const tension = contradictingCount >= 2 ? 'high' :
292
+ contradictingCount >= 1 ? 'medium' : 'low';
293
+ comparisons.push({
294
+ hypothesis: h,
295
+ supportingEvidence: supporting.length,
296
+ contradictingEvidence: contradictingCount,
297
+ tension,
298
+ supportingDetails: supporting,
299
+ contradictingDetails: contradicting,
300
+ });
301
+ }
302
+ comparisons.sort((a, b) => a.contradictingEvidence - b.contradictingEvidence);
303
+ return comparisons;
304
+ }
305
+ // --- Investigative Prompting (#338) ---
306
+ generatePrompts() {
307
+ const prompts = [];
308
+ const facts = this.discoveryLayer.getDiscoveredFacts();
309
+ const gaps = this.detectGaps();
310
+ for (const gap of gaps.slice(0, 2)) {
311
+ prompts.push({
312
+ type: 'prompt',
313
+ confidence: gap.confidence,
314
+ entities: gap.entities,
315
+ relationships: [],
316
+ narrative: `There's a gap in the evidence. ${gap.narrative}`,
317
+ suggestedActions: gap.suggestedActions,
318
+ });
319
+ }
320
+ const entities = this.discoveryLayer.getDiscoveredEntities();
321
+ for (const entity of entities) {
322
+ const entityFacts = facts.filter(f => f.subject === entity.id);
323
+ if (entityFacts.length > 0 && entityFacts.length <= 1) {
324
+ prompts.push({
325
+ type: 'prompt',
326
+ confidence: 'low',
327
+ entities: [entity.id],
328
+ relationships: [],
329
+ narrative: `You have limited evidence about ${entity.name}. Is there more to discover?`,
330
+ });
331
+ }
332
+ }
333
+ const activeHypotheses = this.hypotheses.filter(h => h.status === 'active');
334
+ for (const h of activeHypotheses.slice(0, 2)) {
335
+ prompts.push({
336
+ type: 'prompt',
337
+ confidence: h.confidence,
338
+ entities: [h.entityA, ...(h.entityB ? [h.entityB] : [])],
339
+ relationships: [],
340
+ narrative: `A hypothesis remains unresolved: ${h.statement}`,
341
+ suggestedActions: ['Look for evidence that supports or contradicts this'],
342
+ });
343
+ }
344
+ return prompts;
345
+ }
346
+ // --- Bridge Entity Detection (#417) ---
347
+ detectBridges() {
348
+ const facts = this.discoveryLayer.getDiscoveredFacts();
349
+ if (facts.length < 2)
350
+ return [];
351
+ const factEntities = [];
352
+ for (const fact of facts) {
353
+ const entities = new Set();
354
+ if (fact.subject)
355
+ entities.add(fact.subject);
356
+ for (const ref of getEntities(fact))
357
+ entities.add(ref.id);
358
+ for (const id of fact.entityRefs ?? [])
359
+ entities.add(id);
360
+ if (entities.size > 0)
361
+ factEntities.push([...entities]);
362
+ }
363
+ if (factEntities.length < 2)
364
+ return [];
365
+ const adjacency = new Map();
366
+ for (const entities of factEntities) {
367
+ for (const e of entities) {
368
+ if (!adjacency.has(e))
369
+ adjacency.set(e, new Set());
370
+ }
371
+ for (let i = 0; i < entities.length; i++) {
372
+ for (let j = i + 1; j < entities.length; j++) {
373
+ adjacency.get(entities[i]).add(entities[j]);
374
+ adjacency.get(entities[j]).add(entities[i]);
375
+ }
376
+ }
377
+ }
378
+ const visited = new Set();
379
+ const components = [];
380
+ for (const node of adjacency.keys()) {
381
+ if (visited.has(node))
382
+ continue;
383
+ const component = new Set();
384
+ const queue = [node];
385
+ while (queue.length > 0) {
386
+ const current = queue.shift();
387
+ if (visited.has(current))
388
+ continue;
389
+ visited.add(current);
390
+ component.add(current);
391
+ for (const neighbor of adjacency.get(current) ?? []) {
392
+ if (!visited.has(neighbor))
393
+ queue.push(neighbor);
394
+ }
395
+ }
396
+ components.push(component);
397
+ }
398
+ if (components.length <= 1)
399
+ return [];
400
+ const entityComponents = new Map();
401
+ for (const entities of factEntities) {
402
+ for (const e of entities) {
403
+ if (!entityComponents.has(e))
404
+ entityComponents.set(e, new Set());
405
+ for (let ci = 0; ci < components.length; ci++) {
406
+ if (components[ci].has(e)) {
407
+ entityComponents.get(e).add(ci);
408
+ }
409
+ }
410
+ }
411
+ }
412
+ const outputs = [];
413
+ const bridges = [...entityComponents.entries()]
414
+ .filter(([, comps]) => comps.size >= 2)
415
+ .sort((a, b) => b[1].size - a[1].size);
416
+ for (const [entityId, compIndices] of bridges) {
417
+ const clusterSubjects = [];
418
+ for (const ci of compIndices) {
419
+ const subjects = [...components[ci]].filter(id => id !== entityId).slice(0, 3);
420
+ clusterSubjects.push(subjects.join(', ') || '(unnamed cluster)');
421
+ }
422
+ const factCount = factEntities.filter(es => es.includes(entityId)).length;
423
+ const confidence = compIndices.size >= 3 ? 'high' : 'medium';
424
+ outputs.push({
425
+ type: 'bridge',
426
+ confidence,
427
+ entities: [entityId],
428
+ relationships: ['connects'],
429
+ narrative: `${entityId} connects ${compIndices.size} separate lines of inquiry: ${clusterSubjects.join(' ↔ ')}. Appears in ${factCount} fact${factCount !== 1 ? 's' : ''} across these clusters.`,
430
+ suggestedActions: [`Explore how ${entityId} relates to each line of inquiry`],
431
+ });
432
+ }
433
+ return outputs;
434
+ }
435
+ // --- Helpers ---
436
+ _findCoOccurrences(facts) {
437
+ const pairs = new Map();
438
+ for (const fact of facts) {
439
+ const entities = new Set();
440
+ entities.add(fact.subject);
441
+ for (const ref of getEntities(fact))
442
+ entities.add(ref.id);
443
+ if (fact.entityRefs) {
444
+ for (const id of fact.entityRefs)
445
+ entities.add(id);
446
+ }
447
+ const sorted = [...entities].sort();
448
+ for (let i = 0; i < sorted.length; i++) {
449
+ for (let j = i + 1; j < sorted.length; j++) {
450
+ if (sorted[i].startsWith('artifact_') || sorted[j].startsWith('artifact_'))
451
+ continue;
452
+ if (sorted[i].startsWith('fr-') || sorted[j].startsWith('fr-'))
453
+ continue;
454
+ const key = `${sorted[i]}|${sorted[j]}`;
455
+ pairs.set(key, (pairs.get(key) ?? 0) + 1);
456
+ }
457
+ }
458
+ }
459
+ return pairs;
460
+ }
461
+ _findTemporalClusters(facts) {
462
+ const timeFacts = [];
463
+ for (const fact of facts) {
464
+ const time = this._extractTime(fact);
465
+ if (time)
466
+ timeFacts.push({ time, fact });
467
+ }
468
+ if (timeFacts.length < 2)
469
+ return [];
470
+ timeFacts.sort((a, b) => a.time.localeCompare(b.time));
471
+ const clusters = [];
472
+ let current = { time: timeFacts[0].time, facts: [timeFacts[0].fact] };
473
+ for (let i = 1; i < timeFacts.length; i++) {
474
+ if (this._timeDiffMinutes(current.time, timeFacts[i].time) <= 30) {
475
+ current.facts.push(timeFacts[i].fact);
476
+ }
477
+ else {
478
+ if (current.facts.length >= 2)
479
+ clusters.push(current);
480
+ current = { time: timeFacts[i].time, facts: [timeFacts[i].fact] };
481
+ }
482
+ }
483
+ if (current.facts.length >= 2)
484
+ clusters.push(current);
485
+ return clusters;
486
+ }
487
+ _extractTime(fact) {
488
+ if (fact.rawText) {
489
+ const match = fact.rawText.match(/^(\d{1,2}:\d{2})/);
490
+ if (match)
491
+ return match[1];
492
+ }
493
+ const stmtMatch = fact.statement.match(/(\d{1,2}:\d{2})/);
494
+ return stmtMatch?.[1];
495
+ }
496
+ _extractTimes(facts) {
497
+ const times = [];
498
+ for (const fact of facts) {
499
+ const t = this._extractTime(fact);
500
+ if (t)
501
+ times.push(t);
502
+ const rangeMatch = fact.statement.match(/to (\d{1,2}:\d{2})/);
503
+ if (rangeMatch)
504
+ times.push(rangeMatch[1]);
505
+ }
506
+ return times;
507
+ }
508
+ _timeDiffMinutes(a, b) {
509
+ const [ah, am] = a.split(':').map(Number);
510
+ const [bh, bm] = b.split(':').map(Number);
511
+ return Math.abs((bh * 60 + bm) - (ah * 60 + am));
512
+ }
513
+ }
514
+ //# sourceMappingURL=Analyst.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Analyst.js","sourceRoot":"","sources":["../../src/investigation/Analyst.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA2CrE,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,OAAO,OAAO;IAIR;IACA;IAJF,UAAU,GAA2B,EAAE,CAAC;IAEhD,YACU,cAA8B,EAC9B,QAAmB;QADnB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,aAAQ,GAAR,QAAQ,CAAW;IAC1B,CAAC;IAEJ,+BAA+B;IAE/B;;OAEG;IACH,OAAO;QACL,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAExC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxD,aAAa,EAAE,EAAE;gBACjB,SAAS,EAAE,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,GAAG;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oCAAoC;IAE5B,gBAAgB,CAAC,SAAiB,EAAE,WAAmB,EAAE,mBAA4B;QAC3F,IAAI,mBAAmB,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QAC/E,IAAI,SAAS,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC;QACxD,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mCAAmC;IAEnC,cAAc;QACZ,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,0BAA0B,EAAE,CAAC;QAEvE,uBAAuB;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YAC1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/B,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC;oBAClD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChB,aAAa,EAAE,EAAE;oBACjB,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,2BAA2B,KAAK,sBAAsB;iBAC/E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACvD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjE,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;oBAC/E,QAAQ,EAAE,QAAQ;oBAClB,aAAa,EAAE,EAAE;oBACjB,SAAS,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,yBAAyB,OAAO,CAAC,IAAI,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBAC7G,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,QAAQ;oBACpB,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,CAAC,OAAO,CAAC;oBACxB,SAAS,EAAE,qBAAqB,OAAO,aAAa,KAAK,+BAA+B;iBACzF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,mCAAmC;IAEnC,eAAe;QACb,MAAM,SAAS,GAAuB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC;QAE7D,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,MAAM,0BAA0B,GAAG,IAAI,GAAG,CACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CACrH,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACrG,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,CAAC,OAAO,CAAC;oBACnB,aAAa,EAAE,EAAE;oBACjB,SAAS,EAAE,GAAG,OAAO,4GAA4G;iBAClI,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;gBACxE,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,MAAM;oBAClB,QAAQ,EAAE,QAAQ;oBAClB,aAAa,EAAE,EAAE;oBACjB,SAAS,EAAE,kBAAkB,OAAO,CAAC,IAAI,EAAE;iBAC5C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACnH,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrB,aAAa,EAAE,EAAE;oBACjB,SAAS,EAAE,GAAG,MAAM,CAAC,IAAI,mEAAmE;oBAC5F,gBAAgB,EAAE,CAAC,iBAAiB,MAAM,CAAC,IAAI,EAAE,EAAE,iCAAiC,MAAM,CAAC,IAAI,EAAE,CAAC;iBACnG,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,wBAAwB;IAExB,UAAU;QACR,MAAM,IAAI,GAAuB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAEvD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,SAAS,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3D,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;wBACd,IAAI,CAAC,IAAI,CAAC;4BACR,IAAI,EAAE,KAAK;4BACX,UAAU,EAAE,QAAQ;4BACpB,QAAQ,EAAE,CAAC,OAAO,CAAC;4BACnB,aAAa,EAAE,EAAE;4BACjB,SAAS,EAAE,4BAA4B,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;4BACzF,gBAAgB,EAAE,CAAC,2BAA2B,OAAO,qBAAqB,CAAC;yBAC5E,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mDAAmD;IAEnD,kBAAkB;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACrC,MAAM,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,EAAE,CAAC;gBAC/B,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBAElC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;gBACxE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBACnB,EAAE;oBACF,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,mDAAmD,OAAO,CAAC,IAAI,EAAE;oBACzG,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS;oBACjC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACpB,UAAU,EAAE,QAAQ;oBACpB,MAAM,EAAE,QAAQ;oBAChB,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YAC1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/B,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBAElC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBACnB,EAAE;oBACF,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,+CAA+C,KAAK,sBAAsB;oBAClG,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;oBACzC,MAAM,EAAE,QAAQ;oBAChB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9B,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;wBAC7D,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;wBAC7D,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CACzD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc;gBAAE,SAAS;YAE1C,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrD,CAAC,CAAC,IAAI,KAAK,eAAe;gBAC1B,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACpH,CAAC;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,IAAI,KAAK,SAAS;gBACpB,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACpH,CAAC;YAEF,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBAC1D,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;gBACtB,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC;YACvB,CAAC;YACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACvD,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC;gBACvB,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,6CAA6C;IAE7C,iBAAiB;QACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACvD,MAAM,WAAW,GAA2B,EAAE,CAAC;QAE/C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc;gBAAE,SAAS;YAE1C,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEjE,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,MAAM,aAAa,GAAa,EAAE,CAAC;YAEnC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC5F,IAAI,CAAC,cAAc;oBAAE,SAAS;gBAE9B,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACrC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACtC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAE,SAAS;gBAChD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBAChC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC;YAChD,MAAM,OAAO,GACX,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAClC,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YAE7C,WAAW,CAAC,IAAI,CAAC;gBACf,UAAU,EAAE,CAAC;gBACb,kBAAkB,EAAE,UAAU,CAAC,MAAM;gBACrC,qBAAqB,EAAE,kBAAkB;gBACzC,OAAO;gBACP,iBAAiB,EAAE,UAAU;gBAC7B,oBAAoB,EAAE,aAAa;aACpC,CAAC,CAAC;QACL,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC;QAE9E,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,yCAAyC;IAEzC,eAAe;QACb,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAEvD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,aAAa,EAAE,EAAE;gBACjB,SAAS,EAAE,kCAAkC,GAAG,CAAC,SAAS,EAAE;gBAC5D,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;aACvC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC;QAC7D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrB,aAAa,EAAE,EAAE;oBACjB,SAAS,EAAE,mCAAmC,MAAM,CAAC,IAAI,8BAA8B;iBACxF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxD,aAAa,EAAE,EAAE;gBACjB,SAAS,EAAE,oCAAoC,CAAC,CAAC,SAAS,EAAE;gBAC5D,gBAAgB,EAAE,CAAC,qDAAqD,CAAC;aAC1E,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,yCAAyC;IAEzC,aAAa;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAEhC,MAAM,YAAY,GAAe,EAAE,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;YACnC,IAAI,IAAI,CAAC,OAAO;gBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE;gBAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;gBAAE,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAEvC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;QACjD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,UAAU,GAAkB,EAAE,CAAC;QAErC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;YACpC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;gBAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrB,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvB,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAEtC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;QACxD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBACjE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;oBAC9C,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC1B,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,CAAC,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;aAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;aACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEzC,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC;YAC9C,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/E,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAC1E,MAAM,UAAU,GAAyB,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YAEnF,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,QAAQ,EAAE,CAAC,QAAQ,CAAC;gBACpB,aAAa,EAAE,CAAC,UAAU,CAAC;gBAC3B,SAAS,EAAE,GAAG,QAAQ,aAAa,WAAW,CAAC,IAAI,+BAA+B,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,yBAAyB;gBACjM,gBAAgB,EAAE,CAAC,eAAe,QAAQ,kCAAkC,CAAC;aAC9E,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kBAAkB;IAEV,kBAAkB,CAAC,KAAmB;QAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;YACnC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU;oBAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;wBAAE,SAAS;oBACrF,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;wBAAE,SAAS;oBACzE,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,qBAAqB,CAAC,KAAmB;QAC/C,MAAM,SAAS,GAA8C,EAAE,CAAC;QAEhE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,IAAI;gBAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAiD,EAAE,CAAC;QAClE,IAAI,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtD,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACpE,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,YAAY,CAAC,IAAgB;QACnC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrD,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC1D,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAEO,aAAa,CAAC,KAAmB;QACvC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC9D,IAAI,UAAU;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB,CAAC,CAAS,EAAE,CAAS;QAC3C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;CACF"}