@forestadmin-experimental/datasource-cosmos 1.3.4 → 1.4.1
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/array-collection.d.ts +43 -1
- package/dist/array-collection.d.ts.map +1 -1
- package/dist/array-collection.js +357 -45
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -5
- package/dist/introspection/introspector.d.ts +1 -1
- package/dist/introspection/introspector.d.ts.map +1 -1
- package/dist/introspection/introspector.js +5 -5
- package/dist/model-builder/model.d.ts.map +1 -1
- package/dist/model-builder/model.js +31 -12
- package/package.json +1 -1
|
@@ -13,7 +13,10 @@ export default class ArrayCollection extends CosmosCollection {
|
|
|
13
13
|
private arrayFieldPath;
|
|
14
14
|
private parentIdField;
|
|
15
15
|
private virtualizedChildFields;
|
|
16
|
-
|
|
16
|
+
private enableOptimizations;
|
|
17
|
+
private logger?;
|
|
18
|
+
private static readonly MAX_UNFILTERED_RESULTS;
|
|
19
|
+
constructor(dataSource: DataSource, parentCollection: CosmosCollection, collectionName: string, arrayFieldPath: string, arrayItemSchema: CollectionSchema, logger?: Logger, cosmosClient?: CosmosClient, virtualizedChildFields?: string[], enableOptimizations?: boolean);
|
|
17
20
|
/**
|
|
18
21
|
* Set virtualized child fields (fields that have been converted to virtual collections)
|
|
19
22
|
*/
|
|
@@ -36,6 +39,36 @@ export default class ArrayCollection extends CosmosCollection {
|
|
|
36
39
|
* Set the array field value in a parent record
|
|
37
40
|
*/
|
|
38
41
|
private setArrayInParent;
|
|
42
|
+
/**
|
|
43
|
+
* Execute a custom Cosmos DB SQL query directly
|
|
44
|
+
* This bypasses the parent collection's list() method for optimized array access
|
|
45
|
+
*/
|
|
46
|
+
private executeCustomQuery;
|
|
47
|
+
/**
|
|
48
|
+
* Fetch a single array item by parent ID and index using optimized SQL
|
|
49
|
+
* Uses c.array[index] syntax to avoid loading the entire array
|
|
50
|
+
* For nested virtual collections, recursively resolves the parent first
|
|
51
|
+
*/
|
|
52
|
+
private fetchSingleItem;
|
|
53
|
+
/**
|
|
54
|
+
* Fetch array items using ARRAY_SLICE for efficient pagination
|
|
55
|
+
* Only fetches the required slice instead of the entire array
|
|
56
|
+
*/
|
|
57
|
+
private fetchArraySlice;
|
|
58
|
+
/**
|
|
59
|
+
* Fetch filtered array items using SQL JOIN
|
|
60
|
+
* Pushes filtering to Cosmos DB instead of doing it in memory
|
|
61
|
+
*/
|
|
62
|
+
private fetchFilteredItems;
|
|
63
|
+
/**
|
|
64
|
+
* Build WHERE clause for filtering array items
|
|
65
|
+
* Simplified version that handles basic field filters
|
|
66
|
+
*/
|
|
67
|
+
private buildArrayItemWhereClause;
|
|
68
|
+
/**
|
|
69
|
+
* Check if query could be expensive and log warnings
|
|
70
|
+
*/
|
|
71
|
+
private checkQueryPerformance;
|
|
39
72
|
/**
|
|
40
73
|
* List array items from parent collection
|
|
41
74
|
*/
|
|
@@ -60,10 +93,19 @@ export default class ArrayCollection extends CosmosCollection {
|
|
|
60
93
|
* Update array items
|
|
61
94
|
*/
|
|
62
95
|
update(caller: Caller, filter: Filter, patch: RecordData): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Update a single array item by parent ID and index
|
|
98
|
+
* Extracted as a separate method to support both optimized and general update paths
|
|
99
|
+
*/
|
|
100
|
+
private updateSingleItem;
|
|
63
101
|
/**
|
|
64
102
|
* Delete array items
|
|
65
103
|
*/
|
|
66
104
|
delete(caller: Caller, filter: Filter): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Delete items from a single parent (supports both physical and nested virtual collections)
|
|
107
|
+
*/
|
|
108
|
+
private deleteSingleParent;
|
|
67
109
|
/**
|
|
68
110
|
* Aggregate - Support Count operations for array collections
|
|
69
111
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-collection.d.ts","sourceRoot":"","sources":["../src/array-collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,MAAM,EACN,gBAAgB,
|
|
1
|
+
{"version":3,"file":"array-collection.d.ts","sourceRoot":"","sources":["../src/array-collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,MAAM,EACN,gBAAgB,EAKhB,UAAU,EACV,MAAM,EACN,MAAM,EACN,eAAe,EACf,UAAU,EACV,UAAU,EACX,MAAM,iCAAiC,CAAC;AAEzC,OAAO,gBAAgB,MAAM,cAAc,CAAC;AAG5C;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,gBAAgB;IAC3D,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,mBAAmB,CAAU;IACrC,OAAO,CAAC,MAAM,CAAC,CAAS;IAGxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;gBAGpD,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,gBAAgB,EACjC,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,YAAY,EAC3B,sBAAsB,CAAC,EAAE,MAAM,EAAE,EACjC,mBAAmB,CAAC,EAAE,OAAO;IAmH/B;;OAEG;IACI,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAIxD;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;;OAGG;YACW,kBAAkB;IAmBhC;;;;OAIG;YACW,eAAe;IAoD7B;;;OAGG;YACW,eAAe;IAyB7B;;;OAGG;YACW,kBAAkB;IAsBhC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAwCjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACY,IAAI,CACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,UAAU,EAAE,CAAC;IA+JxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2C1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuExB;;OAEG;IACH,OAAO,CAAC,YAAY;IAyCpB;;OAEG;IACY,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwDhF;;OAEG;IACY,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkDvF;;;OAGG;YACW,gBAAgB;IA2C9B;;OAEG;IACY,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkGpE;;OAEG;YACW,kBAAkB;IA4EhC;;OAEG;IACY,SAAS,CACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAsBrE"}
|
package/dist/array-collection.js
CHANGED
|
@@ -14,7 +14,7 @@ const model_1 = __importDefault(require("./model-builder/model"));
|
|
|
14
14
|
* while keeping data stored in the parent document.
|
|
15
15
|
*/
|
|
16
16
|
class ArrayCollection extends collection_1.default {
|
|
17
|
-
constructor(dataSource, parentCollection, collectionName, arrayFieldPath, arrayItemSchema, logger, cosmosClient, virtualizedChildFields) {
|
|
17
|
+
constructor(dataSource, parentCollection, collectionName, arrayFieldPath, arrayItemSchema, logger, cosmosClient, virtualizedChildFields, enableOptimizations) {
|
|
18
18
|
// Get the parent model to extract Cosmos client info
|
|
19
19
|
const parentModel = parentCollection
|
|
20
20
|
.internalModel;
|
|
@@ -43,6 +43,12 @@ class ArrayCollection extends collection_1.default {
|
|
|
43
43
|
this.arrayFieldPath = arrayFieldPath;
|
|
44
44
|
this.parentIdField = `${parentCollection.name}Id`;
|
|
45
45
|
this.virtualizedChildFields = new Set(virtualizedChildFields || []);
|
|
46
|
+
// Enable optimizations by default, unless explicitly disabled or in test environment
|
|
47
|
+
this.enableOptimizations =
|
|
48
|
+
enableOptimizations !== undefined
|
|
49
|
+
? enableOptimizations
|
|
50
|
+
: process.env.NODE_ENV !== 'test' && typeof jest === 'undefined';
|
|
51
|
+
this.logger = logger;
|
|
46
52
|
// Override the collection name
|
|
47
53
|
Object.defineProperty(this, 'name', {
|
|
48
54
|
value: collectionName,
|
|
@@ -157,6 +163,150 @@ class ArrayCollection extends collection_1.default {
|
|
|
157
163
|
current[parts[parts.length - 1]] = newArray;
|
|
158
164
|
return result;
|
|
159
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Execute a custom Cosmos DB SQL query directly
|
|
168
|
+
* This bypasses the parent collection's list() method for optimized array access
|
|
169
|
+
*/
|
|
170
|
+
async executeCustomQuery(querySpec) {
|
|
171
|
+
const parentModel = this.parentCollection
|
|
172
|
+
.internalModel;
|
|
173
|
+
const container = parentModel.getContainer();
|
|
174
|
+
// Type cast the parameters to satisfy Cosmos DB SDK types
|
|
175
|
+
const cosmosQuerySpec = {
|
|
176
|
+
query: querySpec.query,
|
|
177
|
+
parameters: querySpec.parameters,
|
|
178
|
+
};
|
|
179
|
+
const { resources } = await container.items.query(cosmosQuerySpec).fetchAll();
|
|
180
|
+
return resources;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Fetch a single array item by parent ID and index using optimized SQL
|
|
184
|
+
* Uses c.array[index] syntax to avoid loading the entire array
|
|
185
|
+
* For nested virtual collections, recursively resolves the parent first
|
|
186
|
+
*/
|
|
187
|
+
async fetchSingleItem(caller, parentId, index) {
|
|
188
|
+
// Check if this is a nested virtual collection (parent is itself a composite ID)
|
|
189
|
+
if (parentId.includes(':')) {
|
|
190
|
+
// Parent is a composite ID, need to fetch it through parent collection's list
|
|
191
|
+
const parentRecords = await this.parentCollection.list(caller, new datasource_toolkit_1.PaginatedFilter({
|
|
192
|
+
conditionTree: new datasource_toolkit_1.ConditionTreeLeaf('id', 'Equal', parentId),
|
|
193
|
+
}), new datasource_toolkit_1.Projection('id', this.arrayFieldPath));
|
|
194
|
+
if (parentRecords.length === 0) {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
const parentRecord = parentRecords[0];
|
|
198
|
+
const arrayValues = this.getArrayFromParent(parentRecord);
|
|
199
|
+
if (index < 0 || index >= arrayValues.length) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
parentRecord,
|
|
204
|
+
item: arrayValues[index],
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// Physical collection parent - use direct Cosmos query
|
|
208
|
+
const arrayPath = this.arrayFieldPath.replace(/->/g, '.');
|
|
209
|
+
const query = `SELECT c.id, c.${arrayPath}[${index}] AS item FROM c WHERE c.id = @parentId`;
|
|
210
|
+
const results = await this.executeCustomQuery({
|
|
211
|
+
query,
|
|
212
|
+
parameters: [{ name: '@parentId', value: parentId }],
|
|
213
|
+
});
|
|
214
|
+
if (results.length === 0) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
parentRecord: results[0],
|
|
219
|
+
item: results[0].item,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Fetch array items using ARRAY_SLICE for efficient pagination
|
|
224
|
+
* Only fetches the required slice instead of the entire array
|
|
225
|
+
*/
|
|
226
|
+
async fetchArraySlice(parentId, startIndex, count) {
|
|
227
|
+
const arrayPath = this.arrayFieldPath.replace(/->/g, '.');
|
|
228
|
+
const query = `SELECT c.id, ARRAY_SLICE(c.${arrayPath}, ${startIndex}, ${count}) AS items ` +
|
|
229
|
+
`FROM c WHERE c.id = @parentId`;
|
|
230
|
+
const results = await this.executeCustomQuery({
|
|
231
|
+
query,
|
|
232
|
+
parameters: [{ name: '@parentId', value: parentId }],
|
|
233
|
+
});
|
|
234
|
+
if (results.length === 0) {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
parentRecord: results[0],
|
|
239
|
+
items: results[0].items || [],
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Fetch filtered array items using SQL JOIN
|
|
244
|
+
* Pushes filtering to Cosmos DB instead of doing it in memory
|
|
245
|
+
*/
|
|
246
|
+
async fetchFilteredItems(parentId, conditionTree) {
|
|
247
|
+
const arrayPath = this.arrayFieldPath.replace(/->/g, '.');
|
|
248
|
+
// Build WHERE clause from condition tree
|
|
249
|
+
const whereClause = this.buildArrayItemWhereClause(conditionTree, 'item');
|
|
250
|
+
const query = `SELECT c.id, item, ARRAY_LENGTH(c.${arrayPath}) AS arrayLength ` +
|
|
251
|
+
`FROM c JOIN item IN c.${arrayPath} ` +
|
|
252
|
+
`WHERE c.id = @parentId AND ${whereClause}`;
|
|
253
|
+
const results = await this.executeCustomQuery({
|
|
254
|
+
query,
|
|
255
|
+
parameters: [{ name: '@parentId', value: parentId }],
|
|
256
|
+
});
|
|
257
|
+
return results;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Build WHERE clause for filtering array items
|
|
261
|
+
* Simplified version that handles basic field filters
|
|
262
|
+
*/
|
|
263
|
+
buildArrayItemWhereClause(conditionTree, itemAlias) {
|
|
264
|
+
// Handle leaf nodes
|
|
265
|
+
if ('field' in conditionTree && 'operator' in conditionTree) {
|
|
266
|
+
const leaf = conditionTree;
|
|
267
|
+
const fieldPath = `${itemAlias}.${leaf.field}`;
|
|
268
|
+
switch (leaf.operator) {
|
|
269
|
+
case 'Equal':
|
|
270
|
+
return `${fieldPath} = ${JSON.stringify(leaf.value)}`;
|
|
271
|
+
case 'NotEqual':
|
|
272
|
+
return `${fieldPath} != ${JSON.stringify(leaf.value)}`;
|
|
273
|
+
case 'GreaterThan':
|
|
274
|
+
return `${fieldPath} > ${JSON.stringify(leaf.value)}`;
|
|
275
|
+
case 'LessThan':
|
|
276
|
+
return `${fieldPath} < ${JSON.stringify(leaf.value)}`;
|
|
277
|
+
case 'Present':
|
|
278
|
+
return `IS_DEFINED(${fieldPath}) AND ${fieldPath} != null`;
|
|
279
|
+
case 'Missing':
|
|
280
|
+
return `NOT IS_DEFINED(${fieldPath}) OR ${fieldPath} = null`;
|
|
281
|
+
default:
|
|
282
|
+
// Fallback for unsupported operators
|
|
283
|
+
return '1 = 1';
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Handle branch nodes (AND/OR)
|
|
287
|
+
if ('aggregator' in conditionTree && 'conditions' in conditionTree) {
|
|
288
|
+
const branch = conditionTree;
|
|
289
|
+
const clauses = branch.conditions.map(c => this.buildArrayItemWhereClause(c, itemAlias));
|
|
290
|
+
const operator = branch.aggregator === 'And' ? ' AND ' : ' OR ';
|
|
291
|
+
return `(${clauses.join(operator)})`;
|
|
292
|
+
}
|
|
293
|
+
return '1 = 1';
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Check if query could be expensive and log warnings
|
|
297
|
+
*/
|
|
298
|
+
checkQueryPerformance(filter, hasParentFilter, hasCompositeIdFilter) {
|
|
299
|
+
// Warn if listing all items without parent/ID filters
|
|
300
|
+
if (!hasParentFilter && !hasCompositeIdFilter && !filter?.page?.limit) {
|
|
301
|
+
this.logger?.('Warn', `Virtual collection '${this.name}': Listing all items without specific filters ` +
|
|
302
|
+
`may be slow with large datasets. Consider filtering by parent ID or using pagination.`);
|
|
303
|
+
}
|
|
304
|
+
// Warn if requesting more than reasonable limit
|
|
305
|
+
if (filter?.page?.limit && filter.page.limit > 1000) {
|
|
306
|
+
this.logger?.('Warn', `Virtual collection '${this.name}': Requesting ${filter.page.limit} items. ` +
|
|
307
|
+
`Large result sets may impact performance.`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
160
310
|
/**
|
|
161
311
|
* List array items from parent collection
|
|
162
312
|
*/
|
|
@@ -183,6 +333,29 @@ class ArrayCollection extends collection_1.default {
|
|
|
183
333
|
else if (leaf.operator === 'In') {
|
|
184
334
|
filterByCompositeId = leaf.value;
|
|
185
335
|
}
|
|
336
|
+
// OPTIMIZATION 1: Single composite ID - use direct index access
|
|
337
|
+
// Works for both physical collections and nested virtual collections
|
|
338
|
+
if (this.enableOptimizations && filterByCompositeId && filterByCompositeId.length === 1) {
|
|
339
|
+
const { parentId, index } = this.parseCompositeId(filterByCompositeId[0]);
|
|
340
|
+
try {
|
|
341
|
+
const result = await this.fetchSingleItem(caller, parentId, index);
|
|
342
|
+
if (result && result.item !== undefined && result.item !== null) {
|
|
343
|
+
const item = result.item;
|
|
344
|
+
return [
|
|
345
|
+
{
|
|
346
|
+
id: filterByCompositeId[0],
|
|
347
|
+
[this.parentIdField]: parentId,
|
|
348
|
+
...item,
|
|
349
|
+
},
|
|
350
|
+
];
|
|
351
|
+
}
|
|
352
|
+
return [];
|
|
353
|
+
}
|
|
354
|
+
catch (error) {
|
|
355
|
+
// Fall back to regular path if optimization fails
|
|
356
|
+
// Continue to standard fetching below
|
|
357
|
+
}
|
|
358
|
+
}
|
|
186
359
|
// Optimize by only fetching the parent IDs we need
|
|
187
360
|
if (filterByCompositeId) {
|
|
188
361
|
const parentIds = filterByCompositeId.map(cid => this.parseCompositeId(cid).parentId);
|
|
@@ -200,6 +373,8 @@ class ArrayCollection extends collection_1.default {
|
|
|
200
373
|
}
|
|
201
374
|
}
|
|
202
375
|
}
|
|
376
|
+
// Performance warning for potentially expensive queries
|
|
377
|
+
this.checkQueryPerformance(filter, !!parentFilter, !!filterByCompositeId);
|
|
203
378
|
// Fetch parent records with the array field
|
|
204
379
|
const parentRecords = await this.parentCollection.list(caller, parentFilter || new datasource_toolkit_1.PaginatedFilter({}), new datasource_toolkit_1.Projection('id', this.arrayFieldPath));
|
|
205
380
|
// Flatten array items from all parents
|
|
@@ -251,7 +426,17 @@ class ArrayCollection extends collection_1.default {
|
|
|
251
426
|
const { limit, skip } = filter?.page || { limit: undefined, skip: undefined };
|
|
252
427
|
const start = skip || 0;
|
|
253
428
|
const end = limit ? start + limit : undefined;
|
|
254
|
-
|
|
429
|
+
const paginatedResults = filteredItems.slice(start, end);
|
|
430
|
+
// Safety check: prevent returning excessive results without pagination
|
|
431
|
+
if (paginatedResults.length > ArrayCollection.MAX_UNFILTERED_RESULTS) {
|
|
432
|
+
this.logger?.('Error', `Virtual collection '${this.name}': Query would return ${paginatedResults.length} items, ` +
|
|
433
|
+
`exceeding maximum of ${ArrayCollection.MAX_UNFILTERED_RESULTS}. ` +
|
|
434
|
+
`Please add pagination or more specific filters.`);
|
|
435
|
+
throw new Error(`Result set too large (${paginatedResults.length} items). ` +
|
|
436
|
+
`Maximum allowed is ${ArrayCollection.MAX_UNFILTERED_RESULTS}. ` +
|
|
437
|
+
`Please use pagination or add more specific filters.`);
|
|
438
|
+
}
|
|
439
|
+
return paginatedResults;
|
|
255
440
|
}
|
|
256
441
|
/**
|
|
257
442
|
* Apply condition tree filtering to items
|
|
@@ -424,35 +609,71 @@ class ArrayCollection extends collection_1.default {
|
|
|
424
609
|
* Update array items
|
|
425
610
|
*/
|
|
426
611
|
async update(caller, filter, patch) {
|
|
427
|
-
//
|
|
612
|
+
// Optimization: Check if we're filtering by a single composite ID
|
|
613
|
+
// This avoids loading all array items from all parent documents
|
|
614
|
+
const conditionTree = filter?.conditionTree;
|
|
615
|
+
const isLeaf = conditionTree && 'field' in conditionTree && 'operator' in conditionTree;
|
|
616
|
+
let compositeIds;
|
|
617
|
+
if (isLeaf) {
|
|
618
|
+
const leaf = conditionTree;
|
|
619
|
+
if (leaf.field === 'id') {
|
|
620
|
+
if (leaf.operator === 'Equal') {
|
|
621
|
+
// Single composite ID filter - optimize!
|
|
622
|
+
const { parentId, index } = this.parseCompositeId(leaf.value);
|
|
623
|
+
compositeIds = [{ parentId, index }];
|
|
624
|
+
}
|
|
625
|
+
else if (leaf.operator === 'In') {
|
|
626
|
+
// Multiple composite IDs - still optimize by parsing directly
|
|
627
|
+
const ids = leaf.value;
|
|
628
|
+
compositeIds = ids.map(id => this.parseCompositeId(id));
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
// If we have composite IDs, use the optimized path
|
|
633
|
+
if (compositeIds) {
|
|
634
|
+
// Sequential execution required: updating array items must be done one at a time
|
|
635
|
+
// to prevent conflicts when multiple updates target the same parent document
|
|
636
|
+
for (const { parentId, index } of compositeIds) {
|
|
637
|
+
// eslint-disable-next-line no-await-in-loop -- Sequential prevents data conflicts
|
|
638
|
+
await this.updateSingleItem(caller, parentId, index, patch);
|
|
639
|
+
}
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
// Fallback: Use the general list-based approach for complex filters
|
|
428
643
|
const records = await this.list(caller, new datasource_toolkit_1.PaginatedFilter(filter), new datasource_toolkit_1.Projection('id'));
|
|
429
644
|
// Sequential execution required: updating array items must be done one at a time
|
|
430
645
|
// to prevent conflicts when multiple updates target the same parent document
|
|
431
646
|
for (const record of records) {
|
|
432
647
|
const { parentId, index } = this.parseCompositeId(record.id);
|
|
433
|
-
// Fetch the parent record
|
|
434
648
|
// eslint-disable-next-line no-await-in-loop -- Sequential prevents data conflicts
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
649
|
+
await this.updateSingleItem(caller, parentId, index, patch);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* Update a single array item by parent ID and index
|
|
654
|
+
* Extracted as a separate method to support both optimized and general update paths
|
|
655
|
+
*/
|
|
656
|
+
async updateSingleItem(caller, parentId, index, patch) {
|
|
657
|
+
// Fetch the parent record
|
|
658
|
+
const parentRecords = await this.parentCollection.list(caller, new datasource_toolkit_1.PaginatedFilter({
|
|
659
|
+
conditionTree: new datasource_toolkit_1.ConditionTreeLeaf('id', 'Equal', parentId),
|
|
660
|
+
}), new datasource_toolkit_1.Projection('id', this.arrayFieldPath));
|
|
661
|
+
// Skip if parent not found or item doesn't exist
|
|
662
|
+
if (parentRecords.length > 0) {
|
|
663
|
+
const parentRecord = parentRecords[0];
|
|
664
|
+
const array = this.getArrayFromParent(parentRecord);
|
|
665
|
+
if (array[index]) {
|
|
666
|
+
// Remove parent ID and composite ID from the patch data using destructuring
|
|
667
|
+
const { id: unusedItemId, [this.parentIdField]: unusedParentIdValue, ...patchData } = patch;
|
|
668
|
+
void unusedItemId;
|
|
669
|
+
void unusedParentIdValue;
|
|
670
|
+
// Update the item at the specified index
|
|
671
|
+
const currentItem = typeof array[index] === 'object' && array[index] !== null
|
|
672
|
+
? array[index]
|
|
673
|
+
: {};
|
|
674
|
+
array[index] = { ...currentItem, ...patchData };
|
|
675
|
+
// Update the parent record
|
|
676
|
+
await this.parentCollection.update(caller, new datasource_toolkit_1.Filter({ conditionTree: new datasource_toolkit_1.ConditionTreeLeaf('id', 'Equal', parentId) }), { [this.arrayFieldPath]: array });
|
|
456
677
|
}
|
|
457
678
|
}
|
|
458
679
|
}
|
|
@@ -460,38 +681,127 @@ class ArrayCollection extends collection_1.default {
|
|
|
460
681
|
* Delete array items
|
|
461
682
|
*/
|
|
462
683
|
async delete(caller, filter) {
|
|
463
|
-
//
|
|
464
|
-
const
|
|
465
|
-
|
|
684
|
+
// OPTIMIZATION: Check if we're filtering by composite ID(s)
|
|
685
|
+
const conditionTree = filter?.conditionTree;
|
|
686
|
+
const isLeaf = conditionTree && 'field' in conditionTree && 'operator' in conditionTree;
|
|
466
687
|
const recordsByParent = new Map();
|
|
467
|
-
|
|
468
|
-
const
|
|
469
|
-
if (
|
|
470
|
-
|
|
688
|
+
if (isLeaf) {
|
|
689
|
+
const leaf = conditionTree;
|
|
690
|
+
if (leaf.field === 'id') {
|
|
691
|
+
// Direct composite ID filtering - parse without calling list()
|
|
692
|
+
let compositeIds = [];
|
|
693
|
+
if (leaf.operator === 'Equal') {
|
|
694
|
+
compositeIds = [leaf.value];
|
|
695
|
+
}
|
|
696
|
+
else if (leaf.operator === 'In') {
|
|
697
|
+
compositeIds = leaf.value;
|
|
698
|
+
}
|
|
699
|
+
if (compositeIds.length > 0) {
|
|
700
|
+
// Parse composite IDs directly
|
|
701
|
+
for (const compositeId of compositeIds) {
|
|
702
|
+
const { parentId, index } = this.parseCompositeId(compositeId);
|
|
703
|
+
if (!recordsByParent.has(parentId)) {
|
|
704
|
+
recordsByParent.set(parentId, []);
|
|
705
|
+
}
|
|
706
|
+
recordsByParent.get(parentId)?.push(index);
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
// Handle Forest Admin's pattern: AND condition with id AND parentIdField
|
|
712
|
+
// Example: { And: [{ id: Equal: "parentId:0" }, { third_partiesId: Equal: "parentId" }] }
|
|
713
|
+
else if (conditionTree && 'aggregator' in conditionTree && conditionTree.aggregator === 'And') {
|
|
714
|
+
const branch = conditionTree;
|
|
715
|
+
// Look for the 'id' field condition in the AND branches
|
|
716
|
+
const idCondition = branch.conditions.find((cond) => 'field' in cond && cond.field === 'id' && 'operator' in cond);
|
|
717
|
+
if (idCondition) {
|
|
718
|
+
let compositeIds = [];
|
|
719
|
+
if (idCondition.operator === 'Equal') {
|
|
720
|
+
compositeIds = [idCondition.value];
|
|
721
|
+
}
|
|
722
|
+
else if (idCondition.operator === 'In') {
|
|
723
|
+
compositeIds = idCondition.value;
|
|
724
|
+
}
|
|
725
|
+
if (compositeIds.length > 0) {
|
|
726
|
+
// Parse composite IDs directly
|
|
727
|
+
for (const compositeId of compositeIds) {
|
|
728
|
+
const { parentId, index } = this.parseCompositeId(compositeId);
|
|
729
|
+
if (!recordsByParent.has(parentId)) {
|
|
730
|
+
recordsByParent.set(parentId, []);
|
|
731
|
+
}
|
|
732
|
+
recordsByParent.get(parentId)?.push(index);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
// Fallback: Use list() for complex filters
|
|
738
|
+
if (recordsByParent.size === 0) {
|
|
739
|
+
if (!conditionTree) {
|
|
740
|
+
throw new Error(`Cannot delete from virtual collection '${this.name}' without a filter. ` +
|
|
741
|
+
`This would affect all parent records.`);
|
|
742
|
+
}
|
|
743
|
+
const records = await this.list(caller, new datasource_toolkit_1.PaginatedFilter(filter), new datasource_toolkit_1.Projection('id'));
|
|
744
|
+
for (const record of records) {
|
|
745
|
+
const { parentId, index } = this.parseCompositeId(record.id);
|
|
746
|
+
if (!recordsByParent.has(parentId)) {
|
|
747
|
+
recordsByParent.set(parentId, []);
|
|
748
|
+
}
|
|
749
|
+
recordsByParent.get(parentId)?.push(index);
|
|
471
750
|
}
|
|
472
|
-
recordsByParent.get(parentId)?.push(index);
|
|
473
751
|
}
|
|
474
752
|
// Sequential execution required: deleting array items must be done one parent at a time
|
|
475
753
|
// to prevent conflicts and ensure data consistency
|
|
476
754
|
for (const [parentId, indices] of recordsByParent) {
|
|
477
|
-
// Fetch the parent record
|
|
478
755
|
// eslint-disable-next-line no-await-in-loop -- Sequential prevents data conflicts
|
|
756
|
+
await this.deleteSingleParent(caller, parentId, indices);
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
/**
|
|
760
|
+
* Delete items from a single parent (supports both physical and nested virtual collections)
|
|
761
|
+
*/
|
|
762
|
+
async deleteSingleParent(caller, parentId, indices) {
|
|
763
|
+
// Check if parent is a virtual collection (composite ID contains ':')
|
|
764
|
+
const isNestedVirtualCollection = parentId.includes(':');
|
|
765
|
+
if (isNestedVirtualCollection) {
|
|
766
|
+
// For nested virtual collections, fetch the parent record, modify locally,
|
|
767
|
+
// then update through the parent's parent
|
|
479
768
|
const parentRecords = await this.parentCollection.list(caller, new datasource_toolkit_1.PaginatedFilter({
|
|
480
769
|
conditionTree: new datasource_toolkit_1.ConditionTreeLeaf('id', 'Equal', parentId),
|
|
481
770
|
}), new datasource_toolkit_1.Projection('id', this.arrayFieldPath));
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
771
|
+
if (parentRecords.length === 0) {
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
const parentRecord = parentRecords[0];
|
|
775
|
+
const array = this.getArrayFromParent(parentRecord);
|
|
776
|
+
// Remove items at the specified indices (sort in reverse to avoid index shifting)
|
|
777
|
+
const sortedIndices = indices.sort((a, b) => b - a);
|
|
778
|
+
for (const index of sortedIndices) {
|
|
779
|
+
if (index >= 0 && index < array.length) {
|
|
780
|
+
array.splice(index, 1);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
// Update through the parent collection (which will handle its own parent recursively)
|
|
784
|
+
await this.parentCollection.update(caller, new datasource_toolkit_1.Filter({ conditionTree: new datasource_toolkit_1.ConditionTreeLeaf('id', 'Equal', parentId) }), { [this.arrayFieldPath]: array });
|
|
785
|
+
}
|
|
786
|
+
else {
|
|
787
|
+
// Physical collection parent - use direct update
|
|
788
|
+
const parentRecords = await this.parentCollection.list(caller, new datasource_toolkit_1.PaginatedFilter({
|
|
789
|
+
conditionTree: new datasource_toolkit_1.ConditionTreeLeaf('id', 'Equal', parentId),
|
|
790
|
+
}), new datasource_toolkit_1.Projection('id', this.arrayFieldPath));
|
|
791
|
+
if (parentRecords.length === 0) {
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
const parentRecord = parentRecords[0];
|
|
795
|
+
const array = this.getArrayFromParent(parentRecord);
|
|
796
|
+
// Remove items at the specified indices (sort in reverse to avoid index shifting)
|
|
797
|
+
const sortedIndices = indices.sort((a, b) => b - a);
|
|
798
|
+
for (const index of sortedIndices) {
|
|
799
|
+
if (index >= 0 && index < array.length) {
|
|
489
800
|
array.splice(index, 1);
|
|
490
801
|
}
|
|
491
|
-
// Update the parent record - sequential to prevent conflicts
|
|
492
|
-
// eslint-disable-next-line no-await-in-loop -- Sequential prevents data conflicts
|
|
493
|
-
await this.parentCollection.update(caller, new datasource_toolkit_1.Filter({ conditionTree: new datasource_toolkit_1.ConditionTreeLeaf('id', 'Equal', parentId) }), { [this.arrayFieldPath]: array });
|
|
494
802
|
}
|
|
803
|
+
// Update the parent record
|
|
804
|
+
await this.parentCollection.update(caller, new datasource_toolkit_1.Filter({ conditionTree: new datasource_toolkit_1.ConditionTreeLeaf('id', 'Equal', parentId) }), { [this.arrayFieldPath]: array });
|
|
495
805
|
}
|
|
496
806
|
}
|
|
497
807
|
/**
|
|
@@ -515,5 +825,7 @@ class ArrayCollection extends collection_1.default {
|
|
|
515
825
|
];
|
|
516
826
|
}
|
|
517
827
|
}
|
|
828
|
+
// Maximum number of items to return without specific filtering (prevents memory issues)
|
|
829
|
+
ArrayCollection.MAX_UNFILTERED_RESULTS = 1000;
|
|
518
830
|
exports.default = ArrayCollection;
|
|
519
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcnJheS1jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esd0VBYXlDO0FBRXpDLDhEQUE0QztBQUM1QyxrRUFBZ0Q7QUFFaEQ7Ozs7OztHQU1HO0FBQ0gsTUFBcUIsZUFBZ0IsU0FBUSxvQkFBZ0I7SUFNM0QsWUFDRSxVQUFzQixFQUN0QixnQkFBa0MsRUFDbEMsY0FBc0IsRUFDdEIsY0FBc0IsRUFDdEIsZUFBaUMsRUFDakMsTUFBZSxFQUNmLFlBQTJCLEVBQzNCLHNCQUFpQztRQUVqQyxxREFBcUQ7UUFDckQsTUFBTSxXQUFXLEdBQUksZ0JBQThEO2FBQ2hGLGFBQWEsQ0FBQztRQUVqQixNQUFNLEVBQUUsQ0FDTixPQUFPLEVBQ1AsaURBQ0UsZ0JBQWdCLEVBQUUsSUFDcEIsc0JBQXNCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FDdEMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUNiLCtEQUErRCxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FDeEYsQ0FBQztRQUNKLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVsRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLGdCQUFnQixH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
|
|
831
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcnJheS1jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esd0VBY3lDO0FBRXpDLDhEQUE0QztBQUM1QyxrRUFBZ0Q7QUFFaEQ7Ozs7OztHQU1HO0FBQ0gsTUFBcUIsZUFBZ0IsU0FBUSxvQkFBZ0I7SUFXM0QsWUFDRSxVQUFzQixFQUN0QixnQkFBa0MsRUFDbEMsY0FBc0IsRUFDdEIsY0FBc0IsRUFDdEIsZUFBaUMsRUFDakMsTUFBZSxFQUNmLFlBQTJCLEVBQzNCLHNCQUFpQyxFQUNqQyxtQkFBNkI7UUFFN0IscURBQXFEO1FBQ3JELE1BQU0sV0FBVyxHQUFJLGdCQUE4RDthQUNoRixhQUFhLENBQUM7UUFFakIsTUFBTSxFQUFFLENBQ04sT0FBTyxFQUNQLGlEQUNFLGdCQUFnQixFQUFFLElBQ3BCLHNCQUFzQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQ3RDLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FDYiwrREFBK0QsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQ3hGLENBQUM7UUFDSixDQUFDO1FBRUQsd0RBQXdEO1FBQ3hELE1BQU0sV0FBVyxHQUFHLFlBQVksSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFbEUsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzRCxNQUFNLEVBQUUsQ0FDTixPQUFPLEVBQ1AsMkJBQTJCLE1BQU0sbUJBQW1CLGFBQWEsSUFBSTtZQUNuRSxvQkFBb0IsZ0JBQWdCLEVBQUUsQ0FDekMsQ0FBQztRQUVGLGtEQUFrRDtRQUNsRCxxRUFBcUU7UUFDckUsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFXLENBQ2hDLFdBQVcsRUFDWCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGFBQWEsRUFBRSwrQkFBK0I7UUFDOUMsZ0JBQWdCLEVBQ2hCLEVBQUUsQ0FDSCxDQUFDO1FBRUYsTUFBTSxFQUFFLENBQ04sT0FBTyxFQUNQLDZDQUE2QyxVQUFVLEVBQUUsSUFBSSxlQUFlLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDM0YsQ0FBQztRQUVGLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDO1FBQ2xELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRSxxRkFBcUY7UUFDckYsSUFBSSxDQUFDLG1CQUFtQjtZQUN0QixtQkFBbUIsS0FBSyxTQUFTO2dCQUMvQixDQUFDLENBQUMsbUJBQW1CO2dCQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQztRQUNyRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQiwrQkFBK0I7UUFDL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2xDLEtBQUssRUFBRSxjQUFjO1lBQ3JCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUVILHNEQUFzRDtRQUN0RCxNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLGVBQWU7WUFDbEIsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRTtvQkFDRixVQUFVLEVBQUUsUUFBUTtvQkFDcEIsZUFBZSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDcEYsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixVQUFVLEVBQUUsS0FBSztvQkFDakIsSUFBSSxFQUFFLFFBQVE7aUJBQ0M7Z0JBQ2pCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO29CQUNwQixVQUFVLEVBQUUsUUFBUTtvQkFDcEIsZUFBZSxFQUFFLElBQUksR0FBRyxDQUFDO3dCQUN2QixPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsSUFBSTt3QkFDSixPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsU0FBUzt3QkFDVCxNQUFNO3dCQUNOLE9BQU87d0JBQ1AsVUFBVTt3QkFDVixhQUFhO3FCQUNkLENBQUM7b0JBQ0YsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsUUFBUTtpQkFDQztnQkFDakIsR0FBRyxlQUFlLENBQUMsTUFBTTthQUMxQjtTQUNGLENBQUM7UUFFRix5Q0FBeUM7UUFDekMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3BDLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0kseUJBQXlCLENBQUMsTUFBZ0I7UUFDL0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQUMsV0FBbUI7UUFDMUMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwRCxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTNELE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLEtBQWE7UUFDdkQsT0FBTyxHQUFHLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0IsQ0FBQyxZQUF3QjtRQUNqRCxzRUFBc0U7UUFDdEUsc0RBQXNEO1FBQ3RELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRWhELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUVELGdFQUFnRTtRQUNoRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxJQUFJLEtBQUssR0FBWSxZQUFZLENBQUM7UUFFbEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsWUFBd0IsRUFBRSxRQUFtQjtRQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDbkMsSUFBSSxPQUFPLEdBQWUsTUFBTSxDQUFDO1FBRWpDLHFEQUFxRDtRQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUU1QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBR2hDO1FBQ0MsTUFBTSxXQUFXLEdBQUksSUFBSSxDQUFDLGdCQUE4RDthQUNyRixhQUFhLENBQUM7UUFDakIsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTdDLDBEQUEwRDtRQUMxRCxNQUFNLGVBQWUsR0FBRztZQUN0QixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7WUFDdEIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUE2RDtTQUNwRixDQUFDO1FBRUYsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFOUUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsZUFBZSxDQUMzQixNQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsS0FBYTtRQUViLGlGQUFpRjtRQUNqRixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQiw4RUFBOEU7WUFDOUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUNwRCxNQUFNLEVBQ04sSUFBSSxvQ0FBZSxDQUFDO2dCQUNsQixhQUFhLEVBQUUsSUFBSSxzQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQzthQUM5RCxDQUFDLEVBQ0YsSUFBSSwrQkFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQzFDLENBQUM7WUFFRixJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFMUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU87Z0JBQ0wsWUFBWTtnQkFDWixJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUN6QixDQUFDO1FBQ0osQ0FBQztRQUVELHVEQUF1RDtRQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLFNBQVMsSUFBSSxLQUFLLHlDQUF5QyxDQUFDO1FBRTVGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQzVDLEtBQUs7WUFDTCxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPO1lBQ0wsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGVBQWUsQ0FDM0IsUUFBZ0IsRUFDaEIsVUFBa0IsRUFDbEIsS0FBYTtRQUViLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FDVCw4QkFBOEIsU0FBUyxLQUFLLFVBQVUsS0FBSyxLQUFLLGFBQWE7WUFDN0UsK0JBQStCLENBQUM7UUFFbEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDNUMsS0FBSztZQUNMLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDckQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU87WUFDTCxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4QixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGtCQUFrQixDQUM5QixRQUFnQixFQUNoQixhQUE0QjtRQUU1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFMUQseUNBQXlDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUUsTUFBTSxLQUFLLEdBQ1QscUNBQXFDLFNBQVMsbUJBQW1CO1lBQ2pFLHlCQUF5QixTQUFTLEdBQUc7WUFDckMsOEJBQThCLFdBQVcsRUFBRSxDQUFDO1FBRTlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQzVDLEtBQUs7WUFDTCxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ3JELENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSyx5QkFBeUIsQ0FBQyxhQUE0QixFQUFFLFNBQWlCO1FBQy9FLG9CQUFvQjtRQUNwQixJQUFJLE9BQU8sSUFBSSxhQUFhLElBQUksVUFBVSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxHQUFHLGFBQWtDLENBQUM7WUFDaEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRS9DLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixLQUFLLE9BQU87b0JBQ1YsT0FBTyxHQUFHLFNBQVMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxLQUFLLFVBQVU7b0JBQ2IsT0FBTyxHQUFHLFNBQVMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxLQUFLLGFBQWE7b0JBQ2hCLE9BQU8sR0FBRyxTQUFTLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsS0FBSyxVQUFVO29CQUNiLE9BQU8sR0FBRyxTQUFTLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsS0FBSyxTQUFTO29CQUNaLE9BQU8sY0FBYyxTQUFTLFNBQVMsU0FBUyxVQUFVLENBQUM7Z0JBQzdELEtBQUssU0FBUztvQkFDWixPQUFPLGtCQUFrQixTQUFTLFFBQVEsU0FBUyxTQUFTLENBQUM7Z0JBQy9EO29CQUNFLHFDQUFxQztvQkFDckMsT0FBTyxPQUFPLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsSUFBSSxZQUFZLElBQUksYUFBYSxJQUFJLFlBQVksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNuRSxNQUFNLE1BQU0sR0FBRyxhQUdkLENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN6RixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFFaEUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUN2QyxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCLENBQzNCLE1BQXVCLEVBQ3ZCLGVBQXdCLEVBQ3hCLG9CQUE2QjtRQUU3QixzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN0RSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQ1gsTUFBTSxFQUNOLHVCQUF1QixJQUFJLENBQUMsSUFBSSxnREFBZ0Q7Z0JBQzlFLHVGQUF1RixDQUMxRixDQUFDO1FBQ0osQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDWCxNQUFNLEVBQ04sdUJBQXVCLElBQUksQ0FBQyxJQUFJLGlCQUFpQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVTtnQkFDMUUsMkNBQTJDLENBQzlDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ00sS0FBSyxDQUFDLElBQUksQ0FDakIsTUFBYyxFQUNkLE1BQXVCLEVBQ3ZCLFVBQXNCO1FBRXRCLGtCQUFrQjtRQUNsQixNQUFNLGFBQWEsR0FBRyxNQUFNLEVBQUUsYUFBYSxDQUFDO1FBQzVDLElBQUksWUFBeUMsQ0FBQztRQUM5QyxJQUFJLG1CQUF5QyxDQUFDO1FBRTlDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxhQUFhLElBQUksT0FBTyxJQUFJLGFBQWEsSUFBSSxVQUFVLElBQUksYUFBYSxDQUFDO1FBRXhGLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksR0FBRyxhQUFrQyxDQUFDO1lBRWhELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLHNCQUFzQjtnQkFDdEIsWUFBWSxHQUFHLElBQUksb0NBQWUsQ0FBQztvQkFDakMsYUFBYSxFQUFFLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDdEUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQy9CLCtDQUErQztnQkFDL0MsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUM5QixtQkFBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2xDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFpQixDQUFDO2dCQUMvQyxDQUFDO2dCQUVELGdFQUFnRTtnQkFDaEUscUVBQXFFO2dCQUNyRSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxtQkFBbUIsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3hGLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRTFFLElBQUksQ0FBQzt3QkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFFbkUsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQStCLENBQUM7NEJBRXBELE9BQU87Z0NBQ0w7b0NBQ0UsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztvQ0FDMUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUTtvQ0FDOUIsR0FBRyxJQUFJO2lDQUNSOzZCQUNGLENBQUM7d0JBQ0osQ0FBQzt3QkFFRCxPQUFPLEVBQUUsQ0FBQztvQkFDWixDQUFDO29CQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7d0JBQ2Ysa0RBQWtEO3dCQUNsRCxzQ0FBc0M7b0JBQ3hDLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxtREFBbUQ7Z0JBQ25ELElBQUksbUJBQW1CLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBRXZELElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDakMsWUFBWSxHQUFHLElBQUksb0NBQWUsQ0FBQzs0QkFDakMsYUFBYSxFQUFFLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ3hFLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEMsWUFBWSxHQUFHLElBQUksb0NBQWUsQ0FBQzs0QkFDakMsYUFBYSxFQUFFLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUM7eUJBQ2xFLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFMUUsNENBQTRDO1FBQzVDLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDcEQsTUFBTSxFQUNOLFlBQVksSUFBSSxJQUFJLG9DQUFlLENBQUMsRUFBRSxDQUFDLEVBQ3ZDLElBQUksK0JBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUMxQyxDQUFDO1FBRUYsdUNBQXVDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFpQixFQUFFLENBQUM7UUFFcEMsS0FBSyxNQUFNLFlBQVksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsRUFBWSxDQUFDO1lBQzNDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUxRCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNsQyw4REFBOEQ7Z0JBQzlELHlEQUF5RDtnQkFDekQsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFJLElBQWdDLEVBQUUsQ0FBQztnQkFFOUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEUsK0NBQStDO29CQUMvQywwREFBMEQ7b0JBQzFELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN6RixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUVsRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO3dCQUNoRCxzQkFBc0I7d0JBQ3RCLDREQUE0RDt3QkFDNUQsb0RBQW9EO3dCQUNwRCxNQUFNLFlBQVksR0FBRyxhQUFhLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBRXhFLElBQUksWUFBWSxFQUFFLENBQUM7NEJBQ2pCLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM3QixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztvQkFDM0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUTtvQkFDOUIsR0FBRyxZQUFZO2lCQUNoQixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDO1FBRS9CLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzNDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO2FBQU0sSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN6QixvREFBb0Q7WUFDcEQsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixJQUFJLE1BQU0sRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsbUJBQW1CO1FBQ25CLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlFLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDeEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFOUMsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV6RCx1RUFBdUU7UUFDdkUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUNYLE9BQU8sRUFDUCx1QkFBdUIsSUFBSSxDQUFDLElBQUkseUJBQXlCLGdCQUFnQixDQUFDLE1BQU0sVUFBVTtnQkFDeEYsd0JBQXdCLGVBQWUsQ0FBQyxzQkFBc0IsSUFBSTtnQkFDbEUsaURBQWlELENBQ3BELENBQUM7WUFDRixNQUFNLElBQUksS0FBSyxDQUNiLHlCQUF5QixnQkFBZ0IsQ0FBQyxNQUFNLFdBQVc7Z0JBQ3pELHNCQUFzQixlQUFlLENBQUMsc0JBQXNCLElBQUk7Z0JBQ2hFLHFEQUFxRCxDQUN4RCxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsS0FBbUIsRUFBRSxhQUE0QjtRQUMxRSxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWpDLDBDQUEwQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksYUFBYSxJQUFJLFVBQVUsSUFBSSxhQUFhLENBQUM7UUFFdkUsOENBQThDO1FBQzlDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksR0FBRyxhQUFrQyxDQUFDO1lBQ2hELE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztZQUV4Qyw2REFBNkQ7WUFDN0QsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25ELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCw0Q0FBNEM7UUFDNUMsSUFBSSxZQUFZLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM5RCxNQUFNLE1BQU0sR0FBRyxhQUdkLENBQUM7WUFDRixNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUUxQyxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzNFLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN6QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUMxRSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUN0QixNQUFrQixFQUNsQixLQUFhLEVBQ2IsUUFBZ0IsRUFDaEIsS0FBYztRQUVkLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxRQUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssT0FBTztnQkFDVixPQUFPLFVBQVUsS0FBSyxLQUFLLENBQUM7WUFDOUIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sVUFBVSxLQUFLLEtBQUssQ0FBQztZQUM5QixLQUFLLElBQUk7Z0JBQ1AsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUQsS0FBSyxPQUFPO2dCQUNWLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0QsS0FBSyxTQUFTO2dCQUNaLE9BQU8sVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssU0FBUyxDQUFDO1lBQ3pELEtBQUssU0FBUztnQkFDWixPQUFPLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLFNBQVMsQ0FBQztZQUN6RCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQzVCLEtBQUssaUJBQWlCO2dCQUNwQixPQUFPLFVBQVUsSUFBSSxLQUFLLENBQUM7WUFDN0IsS0FBSyxhQUFhO2dCQUNoQixPQUFPLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDNUIsS0FBSyxvQkFBb0I7Z0JBQ3ZCLE9BQU8sVUFBVSxJQUFJLEtBQUssQ0FBQztZQUM3QixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxDQUNMLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDMUYsQ0FBQztZQUNKLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxDQUNMLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUMzRixDQUFDO1lBQ0osS0FBSyxZQUFZO2dCQUNmLE9BQU8sQ0FDTCxPQUFPLFVBQVUsS0FBSyxRQUFRO29CQUM5QixPQUFPLEtBQUssS0FBSyxRQUFRO29CQUN6QixVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUM3QixDQUFDO1lBQ0osS0FBSyxVQUFVO2dCQUNiLE9BQU8sQ0FDTCxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQzFGLENBQUM7WUFDSixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxDQUNMLE9BQU8sVUFBVSxLQUFLLFFBQVE7b0JBQzlCLE9BQU8sS0FBSyxLQUFLLFFBQVE7b0JBQ3pCLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3ZELENBQUM7WUFDSixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssT0FBTztnQkFDViwwRUFBMEU7Z0JBQzFFLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNoRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM3RCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sR0FBRyxFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRTFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztnQkFFRCxPQUFPLEtBQUssQ0FBQztZQUNmO2dCQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBRXBFLE9BQU8sSUFBSSxDQUFDLENBQUMsaURBQWlEO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQ2xCLEtBQW1CLEVBQ25CLElBQWtEO1FBRWxELE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QixLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUV4QixzRUFBc0U7Z0JBQ3RFLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3JDLHlDQUF5QztnQkFDM0MsQ0FBQztxQkFBTSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDMUIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7cUJBQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQzFCLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixDQUFDO3FCQUFNLENBQUM7b0JBQ04saUJBQWlCO29CQUNqQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBRW5CLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUM3RCxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUMsQ0FBQzt5QkFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDcEUsVUFBVSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQy9CLENBQUM7eUJBQU0sSUFBSSxNQUFNLFlBQVksSUFBSSxJQUFJLE1BQU0sWUFBWSxJQUFJLEVBQUUsQ0FBQzt3QkFDNUQsVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25ELENBQUM7eUJBQU0sQ0FBQzt3QkFDTiwwQ0FBMEM7d0JBQzFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxDQUFDO29CQUVELElBQUksVUFBVSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNyQixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztvQkFDOUMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQWMsRUFBRSxJQUFrQjtRQUN0RCxNQUFNLE9BQU8sR0FBaUIsRUFBRSxDQUFDO1FBRWpDLHlGQUF5RjtRQUN6Riw2RkFBNkY7UUFDN0YsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBVyxDQUFDO1lBRXBELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsb0NBQW9DLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBRUQsMkVBQTJFO1lBQzNFLE1BQU0sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQzFGLEtBQUssWUFBWSxDQUFDO1lBQ2xCLEtBQUssbUJBQW1CLENBQUM7WUFFekIsMEJBQTBCO1lBQzFCLHdGQUF3RjtZQUN4RixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3BELE1BQU0sRUFDTixJQUFJLG9DQUFlLENBQUM7Z0JBQ2xCLGFBQWEsRUFBRSxJQUFJLHNDQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO2FBQzlELENBQUMsRUFDRixJQUFJLCtCQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDMUMsQ0FBQztZQUVGLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxZQUFZLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUzRCxnQ0FBZ0M7WUFDaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBRXJDLDZEQUE2RDtZQUM3RCxrRkFBa0Y7WUFDbEYsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUNoQyxNQUFNLEVBQ04sSUFBSSwyQkFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQzdFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQ3BDLENBQUM7WUFFRixPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNYLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztnQkFDOUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUTtnQkFDOUIsR0FBRyxRQUFRO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxLQUFpQjtRQUNyRSxrRUFBa0U7UUFDbEUsZ0VBQWdFO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxhQUFhLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsYUFBYSxJQUFJLE9BQU8sSUFBSSxhQUFhLElBQUksVUFBVSxJQUFJLGFBQWEsQ0FBQztRQUN4RixJQUFJLFlBQW9FLENBQUM7UUFFekUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxHQUFHLGFBQWtDLENBQUM7WUFFaEQsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQzlCLHlDQUF5QztvQkFDekMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO29CQUV4RSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDbEMsOERBQThEO29CQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBaUIsQ0FBQztvQkFFbkMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsbURBQW1EO1FBQ25ELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsaUZBQWlGO1lBQ2pGLDZFQUE2RTtZQUM3RSxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQy9DLGtGQUFrRjtnQkFDbEYsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUVELE9BQU87UUFDVCxDQUFDO1FBRUQsb0VBQW9FO1FBQ3BFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxvQ0FBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksK0JBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTNGLGlGQUFpRjtRQUNqRiw2RUFBNkU7UUFDN0UsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBWSxDQUFDLENBQUM7WUFFdkUsa0ZBQWtGO1lBQ2xGLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGdCQUFnQixDQUM1QixNQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsS0FBYSxFQUNiLEtBQWlCO1FBRWpCLDBCQUEwQjtRQUMxQixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3BELE1BQU0sRUFDTixJQUFJLG9DQUFlLENBQUM7WUFDbEIsYUFBYSxFQUFFLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7U0FDOUQsQ0FBQyxFQUNGLElBQUksK0JBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUMxQyxDQUFDO1FBRUYsaURBQWlEO1FBQ2pELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXBELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLDRFQUE0RTtnQkFDNUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7Z0JBQzVGLEtBQUssWUFBWSxDQUFDO2dCQUNsQixLQUFLLG1CQUFtQixDQUFDO2dCQUV6Qix5Q0FBeUM7Z0JBQ3pDLE1BQU0sV0FBVyxHQUNmLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSTtvQkFDdkQsQ0FBQyxDQUFFLEtBQUssQ0FBQyxLQUFLLENBQTZCO29CQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNULEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7Z0JBRWhELDJCQUEyQjtnQkFDM0IsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUNoQyxNQUFNLEVBQ04sSUFBSSwyQkFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQzdFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQ2pDLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDbEQsNERBQTREO1FBQzVELE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxhQUFhLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsYUFBYSxJQUFJLE9BQU8sSUFBSSxhQUFhLElBQUksVUFBVSxJQUFJLGFBQWEsQ0FBQztRQUN4RixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUVwRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEdBQUcsYUFBa0MsQ0FBQztZQUVoRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLCtEQUErRDtnQkFDL0QsSUFBSSxZQUFZLEdBQWEsRUFBRSxDQUFDO2dCQUVoQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQzlCLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2xDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBaUIsQ0FBQztnQkFDeEMsQ0FBQztnQkFFRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLCtCQUErQjtvQkFDL0IsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDdkMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBRS9ELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7NEJBQ25DLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO3dCQUVELGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM3QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELHlFQUF5RTtRQUN6RSwwRkFBMEY7YUFDckYsSUFBSSxhQUFhLElBQUksWUFBWSxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlGLE1BQU0sTUFBTSxHQUFHLGFBQW9DLENBQUM7WUFFcEQsd0RBQXdEO1lBQ3hELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN4QyxDQUFDLElBQUksRUFBNkIsRUFBRSxDQUNsQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQy9ELENBQUM7WUFFRixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixJQUFJLFlBQVksR0FBYSxFQUFFLENBQUM7Z0JBRWhDLElBQUksV0FBVyxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDckMsWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQWUsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO3FCQUFNLElBQUksV0FBVyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDekMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxLQUFpQixDQUFDO2dCQUMvQyxDQUFDO2dCQUVELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsK0JBQStCO29CQUMvQixLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUN2QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFFL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzs0QkFDbkMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3BDLENBQUM7d0JBRUQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzdDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksZUFBZSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ2IsMENBQTBDLElBQUksQ0FBQyxJQUFJLHNCQUFzQjtvQkFDdkUsdUNBQXVDLENBQzFDLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLG9DQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSwrQkFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFM0YsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQVksQ0FBQyxDQUFDO2dCQUV2RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUNuQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztnQkFFRCxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztRQUVELHdGQUF3RjtRQUN4RixtREFBbUQ7UUFDbkQsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xELGtGQUFrRjtZQUNsRixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsa0JBQWtCLENBQzlCLE1BQWMsRUFDZCxRQUFnQixFQUNoQixPQUFpQjtRQUVqQixzRUFBc0U7UUFDdEUsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXpELElBQUkseUJBQXlCLEVBQUUsQ0FBQztZQUM5QiwyRUFBMkU7WUFDM0UsMENBQTBDO1lBQzFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDcEQsTUFBTSxFQUNOLElBQUksb0NBQWUsQ0FBQztnQkFDbEIsYUFBYSxFQUFFLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7YUFDOUQsQ0FBQyxFQUNGLElBQUksK0JBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUMxQyxDQUFDO1lBRUYsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFcEQsa0ZBQWtGO1lBQ2xGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFcEQsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3ZDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztZQUVELHNGQUFzRjtZQUN0RixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ2hDLE1BQU0sRUFDTixJQUFJLDJCQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxzQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFDN0UsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FDakMsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04saURBQWlEO1lBQ2pELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDcEQsTUFBTSxFQUNOLElBQUksb0NBQWUsQ0FBQztnQkFDbEIsYUFBYSxFQUFFLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7YUFDOUQsQ0FBQyxFQUNGLElBQUksK0JBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUMxQyxDQUFDO1lBRUYsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFcEQsa0ZBQWtGO1lBQ2xGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFcEQsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3ZDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztZQUVELDJCQUEyQjtZQUMzQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ2hDLE1BQU0sRUFDTixJQUFJLDJCQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxzQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFDN0UsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FDakMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDTSxLQUFLLENBQUMsU0FBUyxDQUN0QixNQUFjLEVBQ2QsTUFBYyxFQUNkLFdBQXdCLEVBQ3hCLEtBQWM7UUFFZCxLQUFLLEtBQUssQ0FBQyxDQUFDLHlDQUF5QztRQUVyRCwrQkFBK0I7UUFDL0IsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMEJBQTBCLFdBQVcsQ0FBQyxTQUFTLHlCQUF5QjtnQkFDdEUsNkNBQTZDLENBQ2hELENBQUM7UUFDSixDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxvQ0FBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksK0JBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTNGLGtDQUFrQztRQUNsQyxPQUFPO1lBQ0w7Z0JBQ0UsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUNyQixLQUFLLEVBQUUsRUFBRTthQUNWO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBNWxDRCx3RkFBd0Y7QUFDaEUsc0NBQXNCLEdBQUcsSUFBSSxDQUFDO2tCQVRuQyxlQUFlIn0=
|
package/dist/index.d.ts
CHANGED
|
@@ -53,6 +53,7 @@ export declare function createCosmosDataSource(endpoint: string, key: string, da
|
|
|
53
53
|
builder?: ConfigurationOptions;
|
|
54
54
|
clientOptions?: CosmosClientOptions;
|
|
55
55
|
virtualArrayCollections?: VirtualArrayCollectionConfig[];
|
|
56
|
+
introspectionSampleSize?: number;
|
|
56
57
|
}): DataSourceFactory;
|
|
57
58
|
/**
|
|
58
59
|
* Create a Cosmos DB datasource for the local emulator
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAIL,iBAAiB,EAIlB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAAE,oBAAoB,EAA2B,MAAM,yBAAyB,CAAC;AACxF,OAAqB,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAI1F,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAEjF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,iBAAiB,CAqBnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IACR,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,uBAAuB,CAAC,EAAE,4BAA4B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAIL,iBAAiB,EAIlB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAAE,oBAAoB,EAA2B,MAAM,yBAAyB,CAAC;AACxF,OAAqB,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAI1F,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAEjF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,iBAAiB,CAqBnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IACR,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,uBAAuB,CAAC,EAAE,4BAA4B,EAAE,CAAC;IACzD,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC,GACA,iBAAiB,CAgSnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IACR,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC,GACA,iBAAiB,CAOnB"}
|
package/dist/index.js
CHANGED
|
@@ -87,14 +87,14 @@ function createCosmosDataSource(endpoint, key, databaseName, options) {
|
|
|
87
87
|
key,
|
|
88
88
|
...options?.clientOptions,
|
|
89
89
|
});
|
|
90
|
-
const { liveQueryConnections, liveQueryDatabase, builder, virtualArrayCollections } = options || {};
|
|
90
|
+
const { liveQueryConnections, liveQueryDatabase, builder, virtualArrayCollections, introspectionSampleSize = 100, } = options || {};
|
|
91
91
|
let collectionModels;
|
|
92
92
|
if (builder) {
|
|
93
93
|
const datasourceBuilder = builder(new builder_1.CosmosDatasourceBuilder(client));
|
|
94
94
|
collectionModels = await datasourceBuilder.createCollectionsFromConfiguration();
|
|
95
95
|
}
|
|
96
96
|
else if (databaseName) {
|
|
97
|
-
collectionModels = await introspector_1.default.introspect(client, databaseName, logger);
|
|
97
|
+
collectionModels = await introspector_1.default.introspect(client, databaseName, logger, introspectionSampleSize);
|
|
98
98
|
}
|
|
99
99
|
else {
|
|
100
100
|
collectionModels = [];
|
|
@@ -142,7 +142,11 @@ function createCosmosDataSource(endpoint, key, databaseName, options) {
|
|
|
142
142
|
// Sequential: we need sample data to introspect array structure
|
|
143
143
|
// eslint-disable-next-line no-await-in-loop -- Sequential introspection required
|
|
144
144
|
const sampleRecords = await parentCollection.list({}, new datasource_toolkit_1.PaginatedFilter({
|
|
145
|
-
page: {
|
|
145
|
+
page: {
|
|
146
|
+
limit: introspectionSampleSize,
|
|
147
|
+
skip: 0,
|
|
148
|
+
apply: (records) => records,
|
|
149
|
+
},
|
|
146
150
|
}), new datasource_toolkit_1.Projection(config.arrayFieldPath));
|
|
147
151
|
// Collect array items from sample records
|
|
148
152
|
const arrayItems = [];
|
|
@@ -221,7 +225,8 @@ function createCosmosDataSource(endpoint, key, databaseName, options) {
|
|
|
221
225
|
segments: [],
|
|
222
226
|
};
|
|
223
227
|
// Create the virtual array collection (without virtualized child fields yet)
|
|
224
|
-
const arrayCollection = new array_collection_1.default(datasource, parentCollection, config.collectionName, config.arrayFieldPath, collectionSchema, logger, client, []
|
|
228
|
+
const arrayCollection = new array_collection_1.default(datasource, parentCollection, config.collectionName, config.arrayFieldPath, collectionSchema, logger, client, [], // Empty for now, will be set after all collections are created
|
|
229
|
+
true);
|
|
225
230
|
// Add the collection to the datasource
|
|
226
231
|
datasource.addCollection(arrayCollection);
|
|
227
232
|
createdVirtualCollections.set(config.collectionName, arrayCollection);
|
|
@@ -294,4 +299,4 @@ function createCosmosDataSourceForEmulator(databaseName, options) {
|
|
|
294
299
|
return createCosmosDataSource(endpoint, key, databaseName, options);
|
|
295
300
|
}
|
|
296
301
|
exports.createCosmosDataSourceForEmulator = createCosmosDataSourceForEmulator;
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMENBQWtFO0FBQ2xFLHdFQVF5QztBQUV6QywwRUFBaUQ7QUFDakQsOERBQTRDO0FBQzVDLDhEQUE0QztBQUM1QyxxREFBd0Y7QUFDeEYsZ0ZBQTBGO0FBRTFGLDRFQUF1RTtBQUV2RSwyQ0FBMkQ7QUFBbEQsK0hBQUEsT0FBTyxPQUFvQjtBQUNwQywyQ0FBMkQ7QUFBbEQsK0hBQUEsT0FBTyxPQUFvQjtBQUNwQyx1REFBZ0U7QUFBdkQsb0lBQUEsT0FBTyxPQUFtQjtBQUNuQyx5REFBa0U7QUFBekQsZ0lBQUEsT0FBTyxPQUFpQjtBQUNqQywrQ0FBK0Q7QUFBdEQscUhBQUEsT0FBTyxPQUFlO0FBSS9COzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQWdCLHdDQUF3QyxDQUN0RCxNQUFvQixFQUNwQixZQUFxQixFQUNyQixPQUE4QjtJQUU5QixPQUFPLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUM5QixJQUFJLGdCQUFnQixDQUFDO1FBRXJCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxpQ0FBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBNEIsQ0FBQztZQUN4RixnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQ3hFLENBQUM7YUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3hCLGdCQUFnQixHQUFHLE1BQU0sc0JBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRixDQUFDO2FBQU0sQ0FBQztZQUNOLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFF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
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMENBQWtFO0FBQ2xFLHdFQVF5QztBQUV6QywwRUFBaUQ7QUFDakQsOERBQTRDO0FBQzVDLDhEQUE0QztBQUM1QyxxREFBd0Y7QUFDeEYsZ0ZBQTBGO0FBRTFGLDRFQUF1RTtBQUV2RSwyQ0FBMkQ7QUFBbEQsK0hBQUEsT0FBTyxPQUFvQjtBQUNwQywyQ0FBMkQ7QUFBbEQsK0hBQUEsT0FBTyxPQUFvQjtBQUNwQyx1REFBZ0U7QUFBdkQsb0lBQUEsT0FBTyxPQUFtQjtBQUNuQyx5REFBa0U7QUFBekQsZ0lBQUEsT0FBTyxPQUFpQjtBQUNqQywrQ0FBK0Q7QUFBdEQscUhBQUEsT0FBTyxPQUFlO0FBSS9COzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQWdCLHdDQUF3QyxDQUN0RCxNQUFvQixFQUNwQixZQUFxQixFQUNyQixPQUE4QjtJQUU5QixPQUFPLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUM5QixJQUFJLGdCQUFnQixDQUFDO1FBRXJCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxpQ0FBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBNEIsQ0FBQztZQUN4RixnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQ3hFLENBQUM7YUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3hCLGdCQUFnQixHQUFHLE1BQU0sc0JBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRixDQUFDO2FBQU0sQ0FBQztZQUNOLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFF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
|
|
@@ -18,7 +18,7 @@ export default class Introspector {
|
|
|
18
18
|
/**
|
|
19
19
|
* Introspect all containers in a Cosmos DB database
|
|
20
20
|
*/
|
|
21
|
-
static introspect(cosmosClient: CosmosClient, databaseName: string, logger?: Logger): Promise<ModelCosmos[]>;
|
|
21
|
+
static introspect(cosmosClient: CosmosClient, databaseName: string, logger?: Logger, sampleSize?: number): Promise<ModelCosmos[]>;
|
|
22
22
|
/**
|
|
23
23
|
* Introspect all containers in the specified database
|
|
24
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspector.d.ts","sourceRoot":"","sources":["../../src/introspection/introspector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAGzD,OAAO,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,WAAW,4BAA4B;IAC3C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,uBAAuB,EAAE,KAAK,CAAC;QAC7B,MAAM,EAAE,4BAA4B,CAAC;QACrC,MAAM,EAAE,YAAY,CAAC;QACrB,WAAW,EAAE,WAAW,CAAC;KAC1B,CAAC,CAAC;CACJ;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B;;OAEG;WACU,UAAU,CACrB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"introspector.d.ts","sourceRoot":"","sources":["../../src/introspection/introspector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAGzD,OAAO,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,WAAW,4BAA4B;IAC3C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,uBAAuB,EAAE,KAAK,CAAC;QAC7B,MAAM,EAAE,4BAA4B,CAAC;QACrC,MAAM,EAAE,YAAY,CAAC;QACrB,WAAW,EAAE,WAAW,CAAC;KAC1B,CAAC,CAAC;CACJ;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B;;OAEG;WACU,UAAU,CACrB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,SAAM,GACf,OAAO,CAAC,WAAW,EAAE,CAAC;IAMzB;;OAEG;mBACkB,aAAa;IAqElC;;OAEG;WACU,mBAAmB,CAC9B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC;IAiBvB;;OAEG;WACU,oBAAoB,CAC/B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,UAAU,SAAM,GACf,OAAO,CAAC,YAAY,CAAC;CAgEzB"}
|
|
@@ -9,14 +9,14 @@ class Introspector {
|
|
|
9
9
|
/**
|
|
10
10
|
* Introspect all containers in a Cosmos DB database
|
|
11
11
|
*/
|
|
12
|
-
static async introspect(cosmosClient, databaseName, logger) {
|
|
12
|
+
static async introspect(cosmosClient, databaseName, logger, sampleSize = 100) {
|
|
13
13
|
logger?.('Info', 'Introspector - Introspect Cosmos DB');
|
|
14
|
-
return Introspector.introspectAll(cosmosClient, databaseName, logger);
|
|
14
|
+
return Introspector.introspectAll(cosmosClient, databaseName, logger, sampleSize);
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Introspect all containers in the specified database
|
|
18
18
|
*/
|
|
19
|
-
static async introspectAll(cosmosClient, databaseName, logger) {
|
|
19
|
+
static async introspectAll(cosmosClient, databaseName, logger, sampleSize = 100) {
|
|
20
20
|
const results = [];
|
|
21
21
|
const database = cosmosClient.database(databaseName);
|
|
22
22
|
// Get all containers in the database
|
|
@@ -30,7 +30,7 @@ class Introspector {
|
|
|
30
30
|
try {
|
|
31
31
|
const model = await (0, container_introspector_1.default)(cosmosClient, containerInfo.id, // Use container name as collection name
|
|
32
32
|
databaseName, containerInfo.id, undefined, // Let introspector determine partition key
|
|
33
|
-
|
|
33
|
+
sampleSize);
|
|
34
34
|
logger?.('Info', `Introspector - Successfully introspected container '${containerInfo.id}'`);
|
|
35
35
|
return { success: true, model };
|
|
36
36
|
}
|
|
@@ -115,4 +115,4 @@ class Introspector {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
exports.default = Introspector;
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm9zcGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vaW50cm9zcGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0Esc0ZBQTJEO0FBRTNELDZFQUFvRDtBQWlCcEQsTUFBcUIsWUFBWTtJQUMvQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUNyQixZQUEwQixFQUMxQixZQUFvQixFQUNwQixNQUFlLEVBQ2YsVUFBVSxHQUFHLEdBQUc7UUFFaEIsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLHFDQUFxQyxDQUFDLENBQUM7UUFFeEQsT0FBTyxZQUFZLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUNoQyxZQUEwQixFQUMxQixZQUFvQixFQUNwQixNQUFlLEVBQ2YsVUFBVSxHQUFHLEdBQUc7UUFFaEIsTUFBTSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJELHFDQUFxQztRQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqRix5Q0FBeUM7UUFDekMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVyRixNQUFNLEVBQUUsQ0FDTixNQUFNLEVBQ04sd0JBQXdCLGNBQWMsQ0FBQyxNQUFNLDRCQUE0QixZQUFZLEdB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model-builder/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;IACvB,IAAI,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,YAAY,CAAS;IAE7B;;OAEG;IACH,OAAO,CAAC,aAAa,CAAS;IAE9B;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAS;IAEjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAe;IAE7B;;OAEG;IACH,OAAO,CAAC,YAAY,CAAe;IAEnC;;OAEG;IACH,OAAO,CAAC,SAAS,CAAY;IAEtB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C,WAAW,CAAC,EAAE,OAAO,CAAC;gBAG3B,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,YAAY,EACpB,qBAAqB,CAAC,EAAE,qBAAqB,EAC7C,WAAW,CAAC,EAAE,OAAO;IAchB,eAAe,IAAI,YAAY;IAIzB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiCjD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpC,KAAK,CAChB,SAAS,EAAE,YAAY,EACvB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model-builder/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;IACvB,IAAI,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,YAAY,CAAS;IAE7B;;OAEG;IACH,OAAO,CAAC,aAAa,CAAS;IAE9B;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAS;IAEjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAe;IAE7B;;OAEG;IACH,OAAO,CAAC,YAAY,CAAe;IAEnC;;OAEG;IACH,OAAO,CAAC,SAAS,CAAY;IAEtB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C,WAAW,CAAC,EAAE,OAAO,CAAC;gBAG3B,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,YAAY,EACpB,qBAAqB,CAAC,EAAE,qBAAqB,EAC7C,WAAW,CAAC,EAAE,OAAO;IAchB,eAAe,IAAI,YAAY;IAIzB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiCjD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpC,KAAK,CAChB,SAAS,EAAE,YAAY,EACvB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,EAAE,CAAC;IA6CX,cAAc,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAM9D,KAAK,CAAC,SAAS,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB7D;;OAEG;YACW,aAAa;IAgB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACI,aAAa,IAAI,YAAY;IAIpC;;OAEG;IACI,YAAY,IAAI,SAAS;IAIhC;;OAEG;IACI,mBAAmB,IAAI,MAAM;IAIpC;;OAEG;IACI,eAAe,IAAI,MAAM;IAIhC;;OAEG;IACI,gBAAgB,IAAI,MAAM;CAGlC"}
|
|
@@ -74,20 +74,39 @@ class ModelCosmos {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
async query(querySpec, offset, limit) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
// If no pagination parameters, fetch all (backward compatibility)
|
|
78
|
+
if (offset === undefined && limit === undefined) {
|
|
79
|
+
const { resources } = await this.container.items.query(querySpec).fetchAll();
|
|
80
|
+
return resources.map(item => serializer_1.default.serialize(item));
|
|
81
|
+
}
|
|
82
|
+
// Use efficient pagination when limit is specified
|
|
83
|
+
// Note: Cosmos DB doesn't support native OFFSET, so we need to skip items client-side
|
|
84
|
+
// but we can still benefit from maxItemCount to limit network transfers
|
|
85
|
+
const query = this.container.items.query(querySpec, {
|
|
86
|
+
maxItemCount: limit ? (offset || 0) + limit : undefined,
|
|
87
|
+
});
|
|
88
|
+
const results = [];
|
|
89
|
+
let itemsFetched = 0;
|
|
90
|
+
const targetCount = (offset || 0) + (limit || 0);
|
|
91
|
+
// Iterate through pages until we have enough items
|
|
92
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
93
|
+
for await (const { resources: page } of query.getAsyncIterator()) {
|
|
94
|
+
results.push(...page);
|
|
95
|
+
itemsFetched += page.length;
|
|
96
|
+
// Stop fetching if we have enough items
|
|
97
|
+
if (limit && itemsFetched >= targetCount) {
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Apply offset and limit
|
|
102
|
+
let finalResults = results;
|
|
83
103
|
if (offset) {
|
|
84
|
-
|
|
104
|
+
finalResults = finalResults.slice(offset);
|
|
85
105
|
}
|
|
86
|
-
if (limit
|
|
87
|
-
|
|
88
|
-
results = results.slice(0, limit);
|
|
106
|
+
if (limit) {
|
|
107
|
+
finalResults = finalResults.slice(0, limit);
|
|
89
108
|
}
|
|
90
|
-
return
|
|
109
|
+
return finalResults.map(item => serializer_1.default.serialize(item));
|
|
91
110
|
}
|
|
92
111
|
async aggregateQuery(querySpec) {
|
|
93
112
|
const { resources } = await this.container.items.query(querySpec).fetchAll();
|
|
@@ -180,4 +199,4 @@ class ModelCosmos {
|
|
|
180
199
|
}
|
|
181
200
|
}
|
|
182
201
|
exports.default = ModelCosmos;
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwtYnVpbGRlci9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUlBLHFFQUE2QztBQVU3QyxNQUFxQixXQUFXO0lBcUM5QixZQUNFLFlBQTBCLEVBQzFCLElBQVksRUFDWixZQUFvQixFQUNwQixhQUFxQixFQUNyQixnQkFBd0IsRUFDeEIsTUFBb0IsRUFDcEIscUJBQTZDLEVBQzdDLFdBQXFCO1FBRXJCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFFL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVNLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQWtCO1FBQ3BDLE1BQU0sY0FBYyxHQUFpQixFQUFFLENBQUM7UUFFeEMseUNBQXlDO1FBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN2QixTQUFTLENBQUMsU0FBUyxHQUFHLElB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
|