@lde/pipeline 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/distribution/importResolver.d.ts.map +1 -1
- package/dist/distribution/importResolver.js +2 -1
- package/dist/distribution/resolver.d.ts +2 -1
- package/dist/distribution/resolver.d.ts.map +1 -1
- package/dist/distribution/resolver.js +3 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +20 -25
- package/dist/progressReporter.d.ts +21 -22
- package/dist/progressReporter.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importResolver.d.ts","sourceRoot":"","sources":["../../src/distribution/importResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,oBAAoB;IAEvD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,qBAAqB;IAG3C,OAAO,CACX,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,GACnD,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"importResolver.d.ts","sourceRoot":"","sources":["../../src/distribution/importResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,oBAAoB;IAEvD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,qBAAqB;IAG3C,OAAO,CACX,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,GACnD,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;IAiCpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -20,12 +20,13 @@ export class ImportResolver {
|
|
|
20
20
|
if (result instanceof ResolvedDistribution)
|
|
21
21
|
return result;
|
|
22
22
|
const [dataset] = args;
|
|
23
|
+
const importStart = Date.now();
|
|
23
24
|
const importResult = await this.options.importer.import(dataset);
|
|
24
25
|
if (importResult instanceof ImportSuccessful) {
|
|
25
26
|
await this.options.server.start();
|
|
26
27
|
const distribution = Distribution.sparql(this.options.server.queryEndpoint, importResult.identifier);
|
|
27
28
|
distribution.subjectFilter = importResult.distribution.subjectFilter;
|
|
28
|
-
return new ResolvedDistribution(distribution, result.probeResults, importResult.distribution);
|
|
29
|
+
return new ResolvedDistribution(distribution, result.probeResults, importResult.distribution, Date.now() - importStart);
|
|
29
30
|
}
|
|
30
31
|
return new NoDistributionAvailable(dataset, 'No SPARQL endpoint or importable data dump available', result.probeResults, importResult instanceof ImportFailed ? importResult : undefined);
|
|
31
32
|
}
|
|
@@ -5,7 +5,8 @@ export declare class ResolvedDistribution {
|
|
|
5
5
|
readonly distribution: Distribution;
|
|
6
6
|
readonly probeResults: ProbeResultType[];
|
|
7
7
|
readonly importedFrom?: Distribution | undefined;
|
|
8
|
-
|
|
8
|
+
readonly importDuration?: number | undefined;
|
|
9
|
+
constructor(distribution: Distribution, probeResults: ProbeResultType[], importedFrom?: Distribution | undefined, importDuration?: number | undefined);
|
|
9
10
|
}
|
|
10
11
|
export declare class NoDistributionAvailable {
|
|
11
12
|
readonly dataset: Dataset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/distribution/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,oBAAoB;IAE7B,QAAQ,CAAC,YAAY,EAAE,YAAY;IACnC,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/distribution/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,oBAAoB;IAE7B,QAAQ,CAAC,YAAY,EAAE,YAAY;IACnC,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;gBAHvB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,eAAe,EAAE,EAC/B,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,cAAc,CAAC,EAAE,MAAM,YAAA;CAEnC;AAED,qBAAa,uBAAuB;IAEhC,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY;gBAH3B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,eAAe,EAAE,EAC/B,YAAY,CAAC,EAAE,YAAY,YAAA;CAEvC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CACL,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,qBAAa,0BAA2B,YAAW,oBAAoB;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,CAAC,EAAE,iCAAiC;IAIjD,OAAO,CACX,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;CA2B3D"}
|
|
@@ -3,10 +3,12 @@ export class ResolvedDistribution {
|
|
|
3
3
|
distribution;
|
|
4
4
|
probeResults;
|
|
5
5
|
importedFrom;
|
|
6
|
-
|
|
6
|
+
importDuration;
|
|
7
|
+
constructor(distribution, probeResults, importedFrom, importDuration) {
|
|
7
8
|
this.distribution = distribution;
|
|
8
9
|
this.probeResults = probeResults;
|
|
9
10
|
this.importedFrom = importedFrom;
|
|
11
|
+
this.importDuration = importDuration;
|
|
10
12
|
}
|
|
11
13
|
}
|
|
12
14
|
export class NoDistributionAvailable {
|
package/dist/pipeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,4BAA4B,CAAC;AAQpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,4BAA4B,CAAC;AAQpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,EAAE;QACT,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AA8BD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAmB;gBAEjC,OAAO,EAAE,eAAe;IAgC9B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAaZ,cAAc;YA4Cd,QAAQ;YA8BR,QAAQ;YAmDR,eAAe;YAkCd,SAAS;CAUzB"}
|
package/dist/pipeline.js
CHANGED
|
@@ -66,27 +66,22 @@ export class Pipeline {
|
|
|
66
66
|
}
|
|
67
67
|
async run() {
|
|
68
68
|
const start = Date.now();
|
|
69
|
-
this.reporter?.pipelineStart(this.name);
|
|
69
|
+
this.reporter?.pipelineStart?.(this.name);
|
|
70
70
|
const datasets = await this.datasetSelector.select();
|
|
71
71
|
for await (const dataset of datasets) {
|
|
72
72
|
await this.processDataset(dataset);
|
|
73
73
|
}
|
|
74
|
-
this.reporter?.pipelineComplete({ duration: Date.now() - start });
|
|
74
|
+
this.reporter?.pipelineComplete?.({ duration: Date.now() - start });
|
|
75
75
|
}
|
|
76
76
|
async processDataset(dataset) {
|
|
77
|
-
|
|
78
|
-
this.reporter?.datasetStart(datasetIri);
|
|
77
|
+
this.reporter?.datasetStart?.(dataset);
|
|
79
78
|
const resolved = await this.distributionResolver.resolve(dataset);
|
|
80
|
-
this.reporter?.distributionsAnalyzed(
|
|
79
|
+
this.reporter?.distributionsAnalyzed?.(dataset, mapProbeResults(dataset, resolved.probeResults));
|
|
81
80
|
if (resolved instanceof NoDistributionAvailable) {
|
|
82
|
-
this.reporter?.datasetSkipped(
|
|
81
|
+
this.reporter?.datasetSkipped?.(dataset, resolved.message);
|
|
83
82
|
return;
|
|
84
83
|
}
|
|
85
|
-
this.reporter?.distributionSelected(
|
|
86
|
-
accessUrl: resolved.distribution.accessUrl.toString(),
|
|
87
|
-
namedGraph: resolved.distribution.namedGraph,
|
|
88
|
-
importedFrom: resolved.importedFrom?.accessUrl?.toString(),
|
|
89
|
-
});
|
|
84
|
+
this.reporter?.distributionSelected?.(dataset, resolved.distribution, resolved.importedFrom, resolved.importDuration);
|
|
90
85
|
try {
|
|
91
86
|
for (const stage of this.stages) {
|
|
92
87
|
try {
|
|
@@ -98,17 +93,17 @@ export class Pipeline {
|
|
|
98
93
|
}
|
|
99
94
|
}
|
|
100
95
|
catch (error) {
|
|
101
|
-
this.reporter?.stageFailed(stage.name, error instanceof Error ? error : new Error(String(error)));
|
|
96
|
+
this.reporter?.stageFailed?.(stage.name, error instanceof Error ? error : new Error(String(error)));
|
|
102
97
|
}
|
|
103
98
|
}
|
|
104
99
|
}
|
|
105
100
|
finally {
|
|
106
101
|
await this.distributionResolver.cleanup?.();
|
|
107
102
|
}
|
|
108
|
-
this.reporter?.datasetComplete(
|
|
103
|
+
this.reporter?.datasetComplete?.(dataset);
|
|
109
104
|
}
|
|
110
105
|
async runStage(dataset, distribution, stage) {
|
|
111
|
-
this.reporter?.stageStart(stage.name);
|
|
106
|
+
this.reporter?.stageStart?.(stage.name);
|
|
112
107
|
const stageStart = Date.now();
|
|
113
108
|
let elementsProcessed = 0;
|
|
114
109
|
let quadsGenerated = 0;
|
|
@@ -116,14 +111,14 @@ export class Pipeline {
|
|
|
116
111
|
onProgress: (elements, quads) => {
|
|
117
112
|
elementsProcessed = elements;
|
|
118
113
|
quadsGenerated = quads;
|
|
119
|
-
this.reporter?.stageProgress({ elementsProcessed, quadsGenerated });
|
|
114
|
+
this.reporter?.stageProgress?.({ elementsProcessed, quadsGenerated });
|
|
120
115
|
},
|
|
121
116
|
});
|
|
122
117
|
if (result instanceof NotSupported) {
|
|
123
|
-
this.reporter?.stageSkipped(stage.name, result.message);
|
|
118
|
+
this.reporter?.stageSkipped?.(stage.name, result.message);
|
|
124
119
|
}
|
|
125
120
|
else {
|
|
126
|
-
this.reporter?.stageComplete(stage.name, {
|
|
121
|
+
this.reporter?.stageComplete?.(stage.name, {
|
|
127
122
|
elementsProcessed,
|
|
128
123
|
quadsGenerated,
|
|
129
124
|
duration: Date.now() - stageStart,
|
|
@@ -163,7 +158,7 @@ export class Pipeline {
|
|
|
163
158
|
}
|
|
164
159
|
}
|
|
165
160
|
async runChainedStage(dataset, distribution, stage, stageWriter) {
|
|
166
|
-
this.reporter?.stageStart(stage.name);
|
|
161
|
+
this.reporter?.stageStart?.(stage.name);
|
|
167
162
|
const stageStart = Date.now();
|
|
168
163
|
let elementsProcessed = 0;
|
|
169
164
|
let quadsGenerated = 0;
|
|
@@ -171,14 +166,14 @@ export class Pipeline {
|
|
|
171
166
|
onProgress: (elements, quads) => {
|
|
172
167
|
elementsProcessed = elements;
|
|
173
168
|
quadsGenerated = quads;
|
|
174
|
-
this.reporter?.stageProgress({ elementsProcessed, quadsGenerated });
|
|
169
|
+
this.reporter?.stageProgress?.({ elementsProcessed, quadsGenerated });
|
|
175
170
|
},
|
|
176
171
|
});
|
|
177
172
|
if (result instanceof NotSupported) {
|
|
178
|
-
this.reporter?.stageSkipped(stage.name, result.message);
|
|
173
|
+
this.reporter?.stageSkipped?.(stage.name, result.message);
|
|
179
174
|
throw new Error(`Stage '${stage.name}' returned NotSupported in chained mode`);
|
|
180
175
|
}
|
|
181
|
-
this.reporter?.stageComplete(stage.name, {
|
|
176
|
+
this.reporter?.stageComplete?.(stage.name, {
|
|
182
177
|
elementsProcessed,
|
|
183
178
|
quadsGenerated,
|
|
184
179
|
duration: Date.now() - stageStart,
|
|
@@ -195,18 +190,18 @@ export class Pipeline {
|
|
|
195
190
|
}
|
|
196
191
|
}
|
|
197
192
|
}
|
|
198
|
-
function mapProbeResults(probeResults) {
|
|
199
|
-
return probeResults.map((result) => {
|
|
193
|
+
function mapProbeResults(dataset, probeResults) {
|
|
194
|
+
return probeResults.map((result, index) => {
|
|
200
195
|
if (result instanceof NetworkError) {
|
|
201
196
|
return {
|
|
202
|
-
|
|
197
|
+
distribution: dataset.distributions[index],
|
|
203
198
|
type: 'network-error',
|
|
204
199
|
available: false,
|
|
205
200
|
error: result.message,
|
|
206
201
|
};
|
|
207
202
|
}
|
|
208
203
|
return {
|
|
209
|
-
|
|
204
|
+
distribution: dataset.distributions[index],
|
|
210
205
|
type: result instanceof SparqlProbeResult
|
|
211
206
|
? 'sparql'
|
|
212
207
|
: 'data-dump',
|
|
@@ -1,33 +1,32 @@
|
|
|
1
|
+
import type { Dataset, Distribution } from '@lde/dataset';
|
|
2
|
+
export interface DistributionAnalysisResult {
|
|
3
|
+
distribution: Distribution;
|
|
4
|
+
type: 'sparql' | 'data-dump' | 'network-error';
|
|
5
|
+
available: boolean;
|
|
6
|
+
statusCode?: number;
|
|
7
|
+
error?: string;
|
|
8
|
+
}
|
|
1
9
|
export interface ProgressReporter {
|
|
2
|
-
pipelineStart(name: string): void;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
error?: string;
|
|
10
|
-
}>): void;
|
|
11
|
-
distributionSelected(dataset: string, distribution: {
|
|
12
|
-
accessUrl: string;
|
|
13
|
-
namedGraph?: string;
|
|
14
|
-
importedFrom?: string;
|
|
15
|
-
}): void;
|
|
16
|
-
stageStart(stage: string): void;
|
|
17
|
-
stageProgress(update: {
|
|
10
|
+
pipelineStart?(name: string): void;
|
|
11
|
+
datasetsSelected?(count: number): void;
|
|
12
|
+
datasetStart?(dataset: Dataset): void;
|
|
13
|
+
distributionsAnalyzed?(dataset: Dataset, results: DistributionAnalysisResult[]): void;
|
|
14
|
+
distributionSelected?(dataset: Dataset, distribution: Distribution, importedFrom?: Distribution, importDuration?: number): void;
|
|
15
|
+
stageStart?(stage: string): void;
|
|
16
|
+
stageProgress?(update: {
|
|
18
17
|
elementsProcessed: number;
|
|
19
18
|
quadsGenerated: number;
|
|
20
19
|
}): void;
|
|
21
|
-
stageComplete(stage: string, result: {
|
|
20
|
+
stageComplete?(stage: string, result: {
|
|
22
21
|
elementsProcessed: number;
|
|
23
22
|
quadsGenerated: number;
|
|
24
23
|
duration: number;
|
|
25
24
|
}): void;
|
|
26
|
-
stageFailed(stage: string, error: Error): void;
|
|
27
|
-
stageSkipped(stage: string, reason: string): void;
|
|
28
|
-
datasetComplete(dataset:
|
|
29
|
-
datasetSkipped(dataset:
|
|
30
|
-
pipelineComplete(result: {
|
|
25
|
+
stageFailed?(stage: string, error: Error): void;
|
|
26
|
+
stageSkipped?(stage: string, reason: string): void;
|
|
27
|
+
datasetComplete?(dataset: Dataset): void;
|
|
28
|
+
datasetSkipped?(dataset: Dataset, reason: string): void;
|
|
29
|
+
pipelineComplete?(result: {
|
|
31
30
|
duration: number;
|
|
32
31
|
}): void;
|
|
33
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progressReporter.d.ts","sourceRoot":"","sources":["../src/progressReporter.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"progressReporter.d.ts","sourceRoot":"","sources":["../src/progressReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,eAAe,CAAC;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,qBAAqB,CAAC,CACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,0BAA0B,EAAE,GACpC,IAAI,CAAC;IACR,oBAAoB,CAAC,CACnB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,YAAY,CAAC,EAAE,YAAY,EAC3B,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CAAC;IACR,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,CAAC,MAAM,EAAE;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,aAAa,CAAC,CACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QACN,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,GACA,IAAI,CAAC;IACR,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAChD,YAAY,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,eAAe,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,cAAc,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,gBAAgB,CAAC,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACvD"}
|