@payloadcms/db-postgres 0.7.0 → 3.0.0-alpha.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. package/dist/connect.d.ts.map +1 -1
  2. package/dist/connect.js +30 -40
  3. package/dist/create.js +6 -21
  4. package/dist/createGlobal.js +6 -21
  5. package/dist/createGlobalVersion.js +10 -25
  6. package/dist/createMigration.js +11 -26
  7. package/dist/createVersion.js +10 -25
  8. package/dist/deleteMany.js +8 -23
  9. package/dist/deleteOne.js +10 -25
  10. package/dist/deleteVersions.js +10 -25
  11. package/dist/destroy.js +2 -12
  12. package/dist/find/buildFindManyArgs.js +6 -14
  13. package/dist/find/chainMethods.js +2 -11
  14. package/dist/find/findMany.js +14 -29
  15. package/dist/find/traverseFields.js +8 -23
  16. package/dist/find.js +6 -21
  17. package/dist/findGlobal.js +6 -21
  18. package/dist/findGlobalVersions.js +8 -23
  19. package/dist/findOne.js +6 -21
  20. package/dist/findVersions.js +8 -23
  21. package/dist/index.d.ts +3 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +76 -88
  24. package/dist/init.js +17 -32
  25. package/dist/migrate.d.ts.map +1 -1
  26. package/dist/migrate.js +15 -33
  27. package/dist/migrateDown.d.ts.map +1 -1
  28. package/dist/migrateDown.js +12 -25
  29. package/dist/migrateFresh.d.ts.map +1 -1
  30. package/dist/migrateFresh.js +15 -31
  31. package/dist/migrateRefresh.d.ts.map +1 -1
  32. package/dist/migrateRefresh.js +18 -29
  33. package/dist/migrateReset.d.ts.map +1 -1
  34. package/dist/migrateReset.js +13 -24
  35. package/dist/migrateStatus.js +9 -19
  36. package/dist/queries/buildAndOrConditions.js +4 -14
  37. package/dist/queries/buildQuery.js +10 -20
  38. package/dist/queries/createJSONQuery/convertPathToJSONTraversal.js +4 -14
  39. package/dist/queries/createJSONQuery/formatJSONPathSegment.js +2 -12
  40. package/dist/queries/createJSONQuery/index.js +6 -16
  41. package/dist/queries/getTableColumnFromPath.js +38 -49
  42. package/dist/queries/operatorMap.js +17 -27
  43. package/dist/queries/parseParams.js +32 -42
  44. package/dist/queries/sanitizeQueryValue.js +8 -18
  45. package/dist/queryDrafts.js +10 -25
  46. package/dist/schema/build.js +49 -64
  47. package/dist/schema/createIndex.js +5 -15
  48. package/dist/schema/idToUUID.js +2 -12
  49. package/dist/schema/parentIDColumnMap.js +7 -17
  50. package/dist/schema/setColumnID.js +10 -20
  51. package/dist/schema/traverseFields.js +62 -77
  52. package/dist/schema/validateExistingBlockIsIdentical.js +9 -19
  53. package/dist/transactions/beginTransaction.js +4 -14
  54. package/dist/transactions/commitTransaction.js +2 -12
  55. package/dist/transactions/rollbackTransaction.js +2 -12
  56. package/dist/transform/read/hasManyNumber.js +2 -12
  57. package/dist/transform/read/hasManyText.js +2 -12
  58. package/dist/transform/read/index.js +12 -20
  59. package/dist/transform/read/relationship.js +2 -12
  60. package/dist/transform/read/traverseFields.js +15 -23
  61. package/dist/transform/write/array.js +6 -16
  62. package/dist/transform/write/blocks.js +6 -21
  63. package/dist/transform/write/index.js +4 -14
  64. package/dist/transform/write/numbers.js +2 -12
  65. package/dist/transform/write/relationships.js +4 -14
  66. package/dist/transform/write/selects.js +4 -14
  67. package/dist/transform/write/texts.js +2 -12
  68. package/dist/transform/write/traverseFields.js +30 -45
  69. package/dist/transform/write/types.js +2 -5
  70. package/dist/types.js +2 -5
  71. package/dist/update.js +11 -26
  72. package/dist/updateGlobal.js +6 -21
  73. package/dist/updateGlobalVersion.js +10 -25
  74. package/dist/updateVersion.js +10 -25
  75. package/dist/upsertRow/deleteExistingArrayRows.js +5 -15
  76. package/dist/upsertRow/deleteExistingRowsByPath.js +9 -19
  77. package/dist/upsertRow/index.d.ts.map +1 -1
  78. package/dist/upsertRow/index.js +25 -36
  79. package/dist/upsertRow/insertArrays.js +2 -12
  80. package/dist/upsertRow/types.js +2 -5
  81. package/dist/utilities/appendPrefixToKeys.js +2 -12
  82. package/dist/utilities/createBlocksMap.js +2 -12
  83. package/dist/utilities/createMigrationTable.js +4 -14
  84. package/dist/utilities/createRelationshipMap.js +2 -12
  85. package/dist/utilities/hasLocalesTable.js +5 -15
  86. package/dist/utilities/isArrayOfRows.js +2 -12
  87. package/dist/utilities/migrationTableExists.js +4 -14
  88. package/dist/utilities/parseError.js +6 -14
  89. package/package.json +6 -6
@@ -1,31 +1,20 @@
1
- /* eslint-disable no-param-reassign */ "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "getTableColumnFromPath", {
6
- enumerable: true,
7
- get: function() {
8
- return getTableColumnFromPath;
9
- }
10
- });
11
- const _drizzleorm = require("drizzle-orm");
12
- const _pgcore = require("drizzle-orm/pg-core");
13
- const _errors = require("payload/errors");
14
- const _types = require("payload/types");
15
- const _utilities = require("payload/utilities");
16
- const _tosnakecase = /*#__PURE__*/ _interop_require_default(require("to-snake-case"));
17
- const _uuid = require("uuid");
18
- function _interop_require_default(obj) {
19
- return obj && obj.__esModule ? obj : {
20
- default: obj
21
- };
22
- }
23
- const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joinAliases, joins, locale: incomingLocale, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, tableName, tableNameSuffix = '', value })=>{
1
+ /* eslint-disable no-param-reassign */ import { and, eq, like, sql } from 'drizzle-orm';
2
+ import { alias } from 'drizzle-orm/pg-core';
3
+ import { APIError } from 'payload/errors';
4
+ import { fieldAffectsData, tabHasName } from 'payload/types';
5
+ import { flattenTopLevelFields } from 'payload/utilities';
6
+ import toSnakeCase from 'to-snake-case';
7
+ import { v4 as uuid } from 'uuid';
8
+ /**
9
+ * Transforms path to table and column name
10
+ * Adds tables to `join`
11
+ * @returns TableColumn
12
+ */ export const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joinAliases, joins, locale: incomingLocale, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, tableName, tableNameSuffix = '', value })=>{
24
13
  const fieldPath = incomingSegments[0];
25
14
  let locale = incomingLocale;
26
15
  const rootTableName = incomingRootTableName || tableName;
27
16
  let constraintPath = incomingConstraintPath || '';
28
- const field = (0, _utilities.flattenTopLevelFields)(fields).find((fieldToFind)=>(0, _types.fieldAffectsData)(fieldToFind) && fieldToFind.name === fieldPath);
17
+ const field = flattenTopLevelFields(fields).find((fieldToFind)=>fieldAffectsData(fieldToFind) && fieldToFind.name === fieldPath);
29
18
  let newTableName = tableName;
30
19
  if (!field && fieldPath === 'id') {
31
20
  selectFields.id = adapter.tables[newTableName].id;
@@ -79,7 +68,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
79
68
  }
80
69
  case 'tab':
81
70
  {
82
- if ((0, _types.tabHasName)(field)) {
71
+ if (tabHasName(field)) {
83
72
  return getTableColumnFromPath({
84
73
  adapter,
85
74
  aliasTable,
@@ -95,7 +84,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
95
84
  rootTableName,
96
85
  selectFields,
97
86
  tableName: newTableName,
98
- tableNameSuffix: `${tableNameSuffix}${(0, _tosnakecase.default)(field.name)}_`,
87
+ tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,
99
88
  value
100
89
  });
101
90
  }
@@ -122,7 +111,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
122
111
  {
123
112
  if (locale && field.localized && adapter.payload.config.localization) {
124
113
  newTableName = `${tableName}_locales`;
125
- joins[tableName] = (0, _drizzleorm.eq)(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
114
+ joins[tableName] = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
126
115
  if (locale !== 'all') {
127
116
  constraints.push({
128
117
  columnName: '_locale',
@@ -146,16 +135,16 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
146
135
  rootTableName,
147
136
  selectFields,
148
137
  tableName: newTableName,
149
- tableNameSuffix: `${tableNameSuffix}${(0, _tosnakecase.default)(field.name)}_`,
138
+ tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,
150
139
  value
151
140
  });
152
141
  }
153
142
  case 'array':
154
143
  {
155
- newTableName = `${tableName}_${tableNameSuffix}${(0, _tosnakecase.default)(field.name)}`;
144
+ newTableName = `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`;
156
145
  constraintPath = `${constraintPath}${field.name}.%.`;
157
146
  if (locale && field.localized && adapter.payload.config.localization) {
158
- joins[newTableName] = (0, _drizzleorm.and)((0, _drizzleorm.eq)(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), (0, _drizzleorm.eq)(adapter.tables[newTableName]._locale, locale));
147
+ joins[newTableName] = and(eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), eq(adapter.tables[newTableName]._locale, locale));
159
148
  if (locale !== 'all') {
160
149
  constraints.push({
161
150
  columnName: '_locale',
@@ -164,7 +153,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
164
153
  });
165
154
  }
166
155
  } else {
167
- joins[newTableName] = (0, _drizzleorm.eq)(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
156
+ joins[newTableName] = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
168
157
  }
169
158
  return getTableColumnFromPath({
170
159
  adapter,
@@ -194,8 +183,8 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
194
183
  ];
195
184
  blockTypes.forEach((blockType)=>{
196
185
  const block = field.blocks.find((block)=>block.slug === blockType);
197
- newTableName = `${tableName}_blocks_${(0, _tosnakecase.default)(block.slug)}`;
198
- joins[newTableName] = (0, _drizzleorm.eq)(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
186
+ newTableName = `${tableName}_blocks_${toSnakeCase(block.slug)}`;
187
+ joins[newTableName] = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
199
188
  constraints.push({
200
189
  columnName: '_path',
201
190
  table: adapter.tables[newTableName],
@@ -210,7 +199,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
210
199
  };
211
200
  }
212
201
  const hasBlockField = field.blocks.some((block)=>{
213
- newTableName = `${tableName}_blocks_${(0, _tosnakecase.default)(block.slug)}`;
202
+ newTableName = `${tableName}_blocks_${toSnakeCase(block.slug)}`;
214
203
  constraintPath = `${constraintPath}${field.name}.%.`;
215
204
  let result;
216
205
  const blockConstraints = [];
@@ -244,7 +233,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
244
233
  ...blockSelectFields
245
234
  };
246
235
  if (field.localized && adapter.payload.config.localization) {
247
- joins[newTableName] = (0, _drizzleorm.and)((0, _drizzleorm.eq)(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), (0, _drizzleorm.eq)(adapter.tables[newTableName]._locale, locale));
236
+ joins[newTableName] = and(eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), eq(adapter.tables[newTableName]._locale, locale));
248
237
  if (locale) {
249
238
  constraints.push({
250
239
  columnName: '_locale',
@@ -253,7 +242,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
253
242
  });
254
243
  }
255
244
  } else {
256
- joins[newTableName] = (0, _drizzleorm.eq)(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
245
+ joins[newTableName] = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
257
246
  }
258
247
  return true;
259
248
  });
@@ -275,22 +264,22 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
275
264
  let relationshipFields;
276
265
  const relationTableName = `${rootTableName}_rels`;
277
266
  const newCollectionPath = pathSegments.slice(1).join('.');
278
- const aliasRelationshipTableName = (0, _uuid.v4)();
279
- const aliasRelationshipTable = (0, _pgcore.alias)(adapter.tables[relationTableName], aliasRelationshipTableName);
267
+ const aliasRelationshipTableName = uuid();
268
+ const aliasRelationshipTable = alias(adapter.tables[relationTableName], aliasRelationshipTableName);
280
269
  // Join in the relationships table
281
270
  joinAliases.push({
282
- condition: (0, _drizzleorm.and)((0, _drizzleorm.eq)((aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), (0, _drizzleorm.like)(aliasRelationshipTable.path, `${constraintPath}${field.name}`)),
271
+ condition: and(eq((aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)),
283
272
  table: aliasRelationshipTable
284
273
  });
285
274
  selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path;
286
275
  let newAliasTable;
287
276
  if (typeof field.relationTo === 'string') {
288
- newTableName = `${(0, _tosnakecase.default)(field.relationTo)}`;
277
+ newTableName = `${toSnakeCase(field.relationTo)}`;
289
278
  // parent to relationship join table
290
279
  relationshipFields = adapter.payload.collections[field.relationTo].config.fields;
291
- newAliasTable = (0, _pgcore.alias)(adapter.tables[newTableName], (0, _tosnakecase.default)((0, _uuid.v4)()));
280
+ newAliasTable = alias(adapter.tables[newTableName], toSnakeCase(uuid()));
292
281
  joinAliases.push({
293
- condition: (0, _drizzleorm.eq)(newAliasTable.id, aliasRelationshipTable[`${field.relationTo}ID`]),
282
+ condition: eq(newAliasTable.id, aliasRelationshipTable[`${field.relationTo}ID`]),
294
283
  table: newAliasTable
295
284
  });
296
285
  if (newCollectionPath === '' || newCollectionPath === 'id') {
@@ -302,11 +291,11 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
302
291
  };
303
292
  }
304
293
  } else if (newCollectionPath === 'value') {
305
- const tableColumnsNames = field.relationTo.map((relationTo)=>`"${aliasRelationshipTableName}"."${(0, _tosnakecase.default)(relationTo)}_id"`);
294
+ const tableColumnsNames = field.relationTo.map((relationTo)=>`"${aliasRelationshipTableName}"."${toSnakeCase(relationTo)}_id"`);
306
295
  return {
307
296
  constraints,
308
297
  field,
309
- rawColumn: _drizzleorm.sql.raw(`COALESCE(${tableColumnsNames.join(', ')})`),
298
+ rawColumn: sql.raw(`COALESCE(${tableColumnsNames.join(', ')})`),
310
299
  table: aliasRelationshipTable
311
300
  };
312
301
  } else if (newCollectionPath === 'relationTo') {
@@ -324,7 +313,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
324
313
  table: aliasRelationshipTable
325
314
  };
326
315
  } else {
327
- throw new _errors.APIError('Not supported');
316
+ throw new APIError('Not supported');
328
317
  }
329
318
  return getTableColumnFromPath({
330
319
  adapter,
@@ -344,13 +333,13 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
344
333
  }
345
334
  default:
346
335
  {
347
- if ((0, _types.fieldAffectsData)(field)) {
336
+ if (fieldAffectsData(field)) {
348
337
  if (field.localized && adapter.payload.config.localization) {
349
338
  // If localized, we go to localized table and set aliasTable to undefined
350
339
  // so it is not picked up below to be used as targetTable
351
340
  newTableName = `${tableName}_locales`;
352
341
  const parentTable = aliasTable || adapter.tables[tableName];
353
- joins[newTableName] = (0, _drizzleorm.eq)(parentTable.id, adapter.tables[newTableName]._parentID);
342
+ joins[newTableName] = eq(parentTable.id, adapter.tables[newTableName]._parentID);
354
343
  aliasTable = undefined;
355
344
  if (locale !== 'all') {
356
345
  constraints.push({
@@ -373,7 +362,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
373
362
  }
374
363
  }
375
364
  }
376
- throw new _errors.APIError(`Cannot find field for path at ${fieldPath}`);
365
+ throw new APIError(`Cannot find field for path at ${fieldPath}`);
377
366
  };
378
367
 
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IFBnVGFibGVXaXRoQ29sdW1ucyB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIE51bWJlckZpZWxkLCBUYWJBc0ZpZWxkLCBUZXh0RmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBsaWtlLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IGFsaWFzIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBHZW5lcmljVGFibGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXMsIEJ1aWxkUXVlcnlKb2lucyB9IGZyb20gJy4vYnVpbGRRdWVyeSdcblxudHlwZSBDb25zdHJhaW50ID0ge1xuICBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgdGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIHZhbHVlOiB1bmtub3duXG59XG5cbnR5cGUgVGFibGVDb2x1bW4gPSB7XG4gIGNvbHVtbk5hbWU/OiBzdHJpbmdcbiAgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXVxuICBmaWVsZDogRmllbGRBZmZlY3RpbmdEYXRhXG4gIGdldE5vdE51bGxDb2x1bW5CeVZhbHVlPzogKHZhbDogdW5rbm93bikgPT4gc3RyaW5nXG4gIHBhdGhTZWdtZW50cz86IHN0cmluZ1tdXG4gIHJhd0NvbHVtbj86IFNRTFxuICB0YWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYWxpYXNUYWJsZT86IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmdcbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbnN0cmFpbnRQYXRoPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzPzogQ29uc3RyYWludFtdXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBqb2luQWxpYXNlczogQnVpbGRRdWVyeUpvaW5BbGlhc2VzXG4gIGpvaW5zOiBCdWlsZFF1ZXJ5Sm9pbnNcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHBhdGhTZWdtZW50czogc3RyaW5nW11cbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICBzZWxlY3RGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdlbmVyaWNDb2x1bW4+XG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBjcmVhdGluZyBhIG5ldyB0YWJsZSBuYW1lIGZvciBhcnJheXMgYW5kIGJsb2NrcywgdGhpcyBzdWZmaXggc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSB0YWJsZSBuYW1lXG4gICAqL1xuICB0YWJsZU5hbWVTdWZmaXg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSByYXcgdmFsdWUgb2YgdGhlIHF1ZXJ5IGJlZm9yZSBzYW5pdGl6YXRpb25cbiAgICovXG4gIHZhbHVlOiB1bmtub3duXG59XG4vKipcbiAqIFRyYW5zZm9ybXMgcGF0aCB0byB0YWJsZSBhbmQgY29sdW1uIG5hbWVcbiAqIEFkZHMgdGFibGVzIHRvIGBqb2luYFxuICogQHJldHVybnMgVGFibGVDb2x1bW5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhYmxlQ29sdW1uRnJvbVBhdGggPSAoe1xuICBhZGFwdGVyLFxuICBhbGlhc1RhYmxlLFxuICBjb2xsZWN0aW9uUGF0aCxcbiAgY29sdW1uUHJlZml4ID0gJycsXG4gIGNvbnN0cmFpbnRQYXRoOiBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoLFxuICBjb25zdHJhaW50cyA9IFtdLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlOiBpbmNvbWluZ0xvY2FsZSxcbiAgcGF0aFNlZ21lbnRzOiBpbmNvbWluZ1NlZ21lbnRzLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHNlbGVjdEZpZWxkcyxcbiAgdGFibGVOYW1lLFxuICB0YWJsZU5hbWVTdWZmaXggPSAnJyxcbiAgdmFsdWUsXG59OiBBcmdzKTogVGFibGVDb2x1bW4gPT4ge1xuICBjb25zdCBmaWVsZFBhdGggPSBpbmNvbWluZ1NlZ21lbnRzWzBdXG4gIGxldCBsb2NhbGUgPSBpbmNvbWluZ0xvY2FsZVxuICBjb25zdCByb290VGFibGVOYW1lID0gaW5jb21pbmdSb290VGFibGVOYW1lIHx8IHRhYmxlTmFtZVxuICBsZXQgY29uc3RyYWludFBhdGggPSBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoIHx8ICcnXG5cbiAgY29uc3QgZmllbGQgPSBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzIGFzIEZpZWxkW10pLmZpbmQoXG4gICAgKGZpZWxkVG9GaW5kKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkVG9GaW5kKSAmJiBmaWVsZFRvRmluZC5uYW1lID09PSBmaWVsZFBhdGgsXG4gICkgYXMgRmllbGQgfCBUYWJBc0ZpZWxkXG4gIGxldCBuZXdUYWJsZU5hbWUgPSB0YWJsZU5hbWVcblxuICBpZiAoIWZpZWxkICYmIGZpZWxkUGF0aCA9PT0gJ2lkJykge1xuICAgIHNlbGVjdEZpZWxkcy5pZCA9IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uaWRcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uTmFtZTogJ2lkJyxcbiAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgZmllbGQ6IHtcbiAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgdHlwZTogYWRhcHRlci5pZFR5cGUgPT09ICd1dWlkJyA/ICd0ZXh0JyA6ICdudW1iZXInLFxuICAgICAgfSBhcyBUZXh0RmllbGQgfCBOdW1iZXJGaWVsZCxcbiAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZCkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IFsuLi5pbmNvbWluZ1NlZ21lbnRzXVxuXG4gICAgLy8gSWYgbmV4dCBzZWdtZW50IGlzIGEgbG9jYWxlLFxuICAgIC8vIHdlIG5lZWQgdG8gdGFrZSBpdCBvdXQgYW5kIHVzZSBpdCBhcyB0aGUgbG9jYWxlIGZyb20gdGhpcyBwb2ludCBvblxuICAgIGlmICgnbG9jYWxpemVkJyBpbiBmaWVsZCAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5maW5kKFxuICAgICAgICAobG9jYWxlKSA9PiBsb2NhbGUgPT09IHBhdGhTZWdtZW50c1sxXSxcbiAgICAgIClcblxuICAgICAgaWYgKG1hdGNoZWRMb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gbWF0Y2hlZExvY2FsZVxuICAgICAgICBwYXRoU2VnbWVudHMuc3BsaWNlKDEsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7XG4gICAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZVN1ZmZpeCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUoZmllbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRQYXRoOiBgJHtjb25zdHJhaW50UGF0aH0ke2ZpZWxkLm5hbWV9LmAsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgICBqb2lucyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgdGFibGVOYW1lU3VmZml4OiBgJHt0YWJsZU5hbWVTdWZmaXh9JHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1fYCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZVN1ZmZpeCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZ3JvdXAnOiB7XG4gICAgICAgIGlmIChsb2NhbGUgJiYgZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9sb2NhbGVzYFxuXG4gICAgICAgICAgam9pbnNbdGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaCh7XG4gICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBsb2NhbGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aDogYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfS5gLFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWVTdWZmaXg6IGAke3RhYmxlTmFtZVN1ZmZpeH0ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfV9gLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV8ke3RhYmxlTmFtZVN1ZmZpeH0ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWBcbiAgICAgICAgY29uc3RyYWludFBhdGggPSBgJHtjb25zdHJhaW50UGF0aH0ke2ZpZWxkLm5hbWV9LiUuYFxuICAgICAgICBpZiAobG9jYWxlICYmIGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBhbmQoXG4gICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCksXG4gICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9sb2NhbGUsIGxvY2FsZSksXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChsb2NhbGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19sb2NhbGUnLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGxldCBibG9ja1RhYmxlQ29sdW1uOiBUYWJsZUNvbHVtblxuICAgICAgICBsZXQgbmV3VGFibGVOYW1lOiBzdHJpbmdcblxuICAgICAgICAvLyBoYW5kbGUgYmxvY2tUeXBlIHF1ZXJpZXNcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50c1sxXSA9PT0gJ2Jsb2NrVHlwZScpIHtcbiAgICAgICAgICAvLyBmaW5kIHRoZSBibG9jayBjb25maWcgdXNpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdXG4gICAgICAgICAgYmxvY2tUeXBlcy5mb3JFYWNoKChibG9ja1R5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gZmllbGQuYmxvY2tzLmZpbmQoKGJsb2NrKSA9PiBibG9jay5zbHVnID09PSBibG9ja1R5cGUpXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19wYXRoJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXRoU2VnbWVudHNbMF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKCkgPT4gJ2lkJyxcbiAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc0Jsb2NrRmllbGQgPSBmaWVsZC5ibG9ja3Muc29tZSgoYmxvY2spID0+IHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCA9IGAke2NvbnN0cmFpbnRQYXRofSR7ZmllbGQubmFtZX0uJS5gXG4gICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgIGNvbnN0IGJsb2NrQ29uc3RyYWludHMgPSBbXVxuICAgICAgICAgIGNvbnN0IGJsb2NrU2VsZWN0RmllbGRzID0ge31cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHM6IGJsb2NrQ29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHNlbGVjdEZpZWxkczogYmxvY2tTZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgZmluZSwgbm90IGV2ZXJ5IGJsb2NrIHdpbGwgaGF2ZSB0aGUgZmllbGRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBibG9ja1RhYmxlQ29sdW1uID0gcmVzdWx0XG4gICAgICAgICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50cy5jb25jYXQoYmxvY2tDb25zdHJhaW50cylcbiAgICAgICAgICBzZWxlY3RGaWVsZHMgPSB7IC4uLnNlbGVjdEZpZWxkcywgLi4uYmxvY2tTZWxlY3RGaWVsZHMgfVxuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBhbmQoXG4gICAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKSxcbiAgICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fbG9jYWxlLCBsb2NhbGUpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGhhc0Jsb2NrRmllbGQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uTmFtZTogYmxvY2tUYWJsZUNvbHVtbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICBmaWVsZDogYmxvY2tUYWJsZUNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcmF3Q29sdW1uOiBibG9ja1RhYmxlQ29sdW1uLnJhd0NvbHVtbixcbiAgICAgICAgICAgIHRhYmxlOiBibG9ja1RhYmxlQ29sdW1uLnRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOlxuICAgICAgY2FzZSAndXBsb2FkJzoge1xuICAgICAgICBsZXQgcmVsYXRpb25zaGlwRmllbGRzXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fcmVsc2BcbiAgICAgICAgY29uc3QgbmV3Q29sbGVjdGlvblBhdGggPSBwYXRoU2VnbWVudHMuc2xpY2UoMSkuam9pbignLicpXG4gICAgICAgIGNvbnN0IGFsaWFzUmVsYXRpb25zaGlwVGFibGVOYW1lID0gdXVpZCgpXG4gICAgICAgIGNvbnN0IGFsaWFzUmVsYXRpb25zaGlwVGFibGUgPSBhbGlhcyhcbiAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvblRhYmxlTmFtZV0sXG4gICAgICAgICAgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUsXG4gICAgICAgIClcblxuICAgICAgICAvLyBKb2luIGluIHRoZSByZWxhdGlvbnNoaXBzIHRhYmxlXG4gICAgICAgIGpvaW5BbGlhc2VzLnB1c2goe1xuICAgICAgICAgIGNvbmRpdGlvbjogYW5kKFxuICAgICAgICAgICAgZXEoKGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0pLmlkLCBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLnBhcmVudCksXG4gICAgICAgICAgICBsaWtlKGFsaWFzUmVsYXRpb25zaGlwVGFibGUucGF0aCwgYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfWApLFxuICAgICAgICAgICksXG4gICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2VsZWN0RmllbGRzW2Ake3JlbGF0aW9uVGFibGVOYW1lfS5wYXRoYF0gPSBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLnBhdGhcblxuICAgICAgICBsZXQgbmV3QWxpYXNUYWJsZVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQucmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0b1NuYWtlQ2FzZShmaWVsZC5yZWxhdGlvblRvKX1gXG4gICAgICAgICAgLy8gcGFyZW50IHRvIHJlbGF0aW9uc2hpcCBqb2luIHRhYmxlXG4gICAgICAgICAgcmVsYXRpb25zaGlwRmllbGRzID0gYWRhcHRlci5wYXlsb2FkLmNvbGxlY3Rpb25zW2ZpZWxkLnJlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgICAgIG5ld0FsaWFzVGFibGUgPSBhbGlhcyhhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLCB0b1NuYWtlQ2FzZSh1dWlkKCkpKVxuXG4gICAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgICBjb25kaXRpb246IGVxKG5ld0FsaWFzVGFibGUuaWQsIGFsaWFzUmVsYXRpb25zaGlwVGFibGVbYCR7ZmllbGQucmVsYXRpb25Ub31JRGBdKSxcbiAgICAgICAgICAgIHRhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICcnIHx8IG5ld0NvbGxlY3Rpb25QYXRoID09PSAnaWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtmaWVsZC5yZWxhdGlvblRvfUlEYCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnNOYW1lcyA9IGZpZWxkLnJlbGF0aW9uVG8ubWFwKFxuICAgICAgICAgICAgKHJlbGF0aW9uVG8pID0+IGBcIiR7YWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWV9XCIuXCIke3RvU25ha2VDYXNlKHJlbGF0aW9uVG8pfV9pZFwiYCxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICByYXdDb2x1bW46IHNxbC5yYXcoYENPQUxFU0NFKCR7dGFibGVDb2x1bW5zTmFtZXMuam9pbignLCAnKX0pYCksXG4gICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICdyZWxhdGlvblRvJykge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uVG8gPSBBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pID8gZmllbGQucmVsYXRpb25UbyA6IFtmaWVsZC5yZWxhdGlvblRvXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVsYXRpb24gPSByZWxhdGlvblRvLmZpbmQoKHJlbGF0aW9uKSA9PiByZWxhdGlvbiA9PT0gdmFsKVxuICAgICAgICAgICAgICBpZiAobWF0Y2hlZFJlbGF0aW9uKSByZXR1cm4gYCR7bWF0Y2hlZFJlbGF0aW9ufUlEYFxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcignTm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoOiBuZXdDb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IHJlbGF0aW9uc2hpcEZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGl6ZWQsIHdlIGdvIHRvIGxvY2FsaXplZCB0YWJsZSBhbmQgc2V0IGFsaWFzVGFibGUgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBzbyBpdCBpcyBub3QgcGlja2VkIHVwIGJlbG93IHRvIGJlIHVzZWQgYXMgdGFyZ2V0VGFibGVcbiAgICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50VGFibGUgPSBhbGlhc1RhYmxlIHx8IGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV1cblxuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKHBhcmVudFRhYmxlLmlkLCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRClcblxuICAgICAgICAgICAgYWxpYXNUYWJsZSA9IHVuZGVmaW5lZFxuXG4gICAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRUYWJsZSA9IGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXVxuXG4gICAgICAgICAgc2VsZWN0RmllbGRzW2Ake25ld1RhYmxlTmFtZX0uJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWBdID1cbiAgICAgICAgICAgIHRhcmdldFRhYmxlW2Ake2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YF1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWAsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzLFxuICAgICAgICAgICAgdGFibGU6IHRhcmdldFRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBBUElFcnJvcihgQ2Fubm90IGZpbmQgZmllbGQgZm9yIHBhdGggYXQgJHtmaWVsZFBhdGh9YClcbn1cbiJdLCJuYW1lcyI6WyJnZXRUYWJsZUNvbHVtbkZyb21QYXRoIiwiYWRhcHRlciIsImFsaWFzVGFibGUiLCJjb2xsZWN0aW9uUGF0aCIsImNvbHVtblByZWZpeCIsImNvbnN0cmFpbnRQYXRoIiwiaW5jb21pbmdDb25zdHJhaW50UGF0aCIsImNvbnN0cmFpbnRzIiwiZmllbGRzIiwiam9pbkFsaWFzZXMiLCJqb2lucyIsImxvY2FsZSIsImluY29taW5nTG9jYWxlIiwicGF0aFNlZ21lbnRzIiwiaW5jb21pbmdTZWdtZW50cyIsInJvb3RUYWJsZU5hbWUiLCJpbmNvbWluZ1Jvb3RUYWJsZU5hbWUiLCJzZWxlY3RGaWVsZHMiLCJ0YWJsZU5hbWUiLCJ0YWJsZU5hbWVTdWZmaXgiLCJ2YWx1ZSIsImZpZWxkUGF0aCIsImZpZWxkIiwiZmxhdHRlblRvcExldmVsRmllbGRzIiwiZmluZCIsImZpZWxkVG9GaW5kIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJuZXdUYWJsZU5hbWUiLCJpZCIsInRhYmxlcyIsImNvbHVtbk5hbWUiLCJ0eXBlIiwiaWRUeXBlIiwidGFibGUiLCJsb2NhbGl6ZWQiLCJwYXlsb2FkIiwiY29uZmlnIiwibG9jYWxpemF0aW9uIiwibWF0Y2hlZExvY2FsZSIsImxvY2FsZUNvZGVzIiwic3BsaWNlIiwidGFicyIsIm1hcCIsInRhYiIsInNsaWNlIiwidGFiSGFzTmFtZSIsInRvU25ha2VDYXNlIiwiZXEiLCJfcGFyZW50SUQiLCJwdXNoIiwiYW5kIiwiX2xvY2FsZSIsImJsb2NrVGFibGVDb2x1bW4iLCJibG9ja1R5cGVzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsImJsb2NrVHlwZSIsImJsb2NrIiwiYmxvY2tzIiwic2x1ZyIsImdldE5vdE51bGxDb2x1bW5CeVZhbHVlIiwiaGFzQmxvY2tGaWVsZCIsInNvbWUiLCJyZXN1bHQiLCJibG9ja0NvbnN0cmFpbnRzIiwiYmxvY2tTZWxlY3RGaWVsZHMiLCJlcnJvciIsImNvbmNhdCIsInJhd0NvbHVtbiIsInJlbGF0aW9uc2hpcEZpZWxkcyIsInJlbGF0aW9uVGFibGVOYW1lIiwibmV3Q29sbGVjdGlvblBhdGgiLCJqb2luIiwiYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUiLCJ1dWlkIiwiYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSIsImFsaWFzIiwiY29uZGl0aW9uIiwicGFyZW50IiwibGlrZSIsInBhdGgiLCJuZXdBbGlhc1RhYmxlIiwicmVsYXRpb25UbyIsImNvbGxlY3Rpb25zIiwidGFibGVDb2x1bW5zTmFtZXMiLCJzcWwiLCJyYXciLCJ2YWwiLCJtYXRjaGVkUmVsYXRpb24iLCJyZWxhdGlvbiIsInVuZGVmaW5lZCIsIkFQSUVycm9yIiwicGFyZW50VGFibGUiLCJ0YXJnZXRUYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQTZEdkJBOzs7ZUFBQUE7Ozs0QkF4RHNCO3dCQUNiO3dCQUNHO3VCQUNvQjsyQkFDUDtvRUFDZDtzQkFDRzs7Ozs7O0FBa0RwQixNQUFNQSx5QkFBeUIsQ0FBQyxFQUNyQ0MsT0FBTyxFQUNQQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsZUFBZSxFQUFFLEVBQ2pCQyxnQkFBZ0JDLHNCQUFzQixFQUN0Q0MsY0FBYyxFQUFFLEVBQ2hCQyxNQUFNLEVBQ05DLFdBQVcsRUFDWEMsS0FBSyxFQUNMQyxRQUFRQyxjQUFjLEVBQ3RCQyxjQUFjQyxnQkFBZ0IsRUFDOUJDLGVBQWVDLHFC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
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IFBnVGFibGVXaXRoQ29sdW1ucyB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIE51bWJlckZpZWxkLCBUYWJBc0ZpZWxkLCBUZXh0RmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBsaWtlLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IGFsaWFzIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBHZW5lcmljVGFibGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXMsIEJ1aWxkUXVlcnlKb2lucyB9IGZyb20gJy4vYnVpbGRRdWVyeSdcblxudHlwZSBDb25zdHJhaW50ID0ge1xuICBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgdGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIHZhbHVlOiB1bmtub3duXG59XG5cbnR5cGUgVGFibGVDb2x1bW4gPSB7XG4gIGNvbHVtbk5hbWU/OiBzdHJpbmdcbiAgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXVxuICBmaWVsZDogRmllbGRBZmZlY3RpbmdEYXRhXG4gIGdldE5vdE51bGxDb2x1bW5CeVZhbHVlPzogKHZhbDogdW5rbm93bikgPT4gc3RyaW5nXG4gIHBhdGhTZWdtZW50cz86IHN0cmluZ1tdXG4gIHJhd0NvbHVtbj86IFNRTFxuICB0YWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYWxpYXNUYWJsZT86IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmdcbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbnN0cmFpbnRQYXRoPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzPzogQ29uc3RyYWludFtdXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBqb2luQWxpYXNlczogQnVpbGRRdWVyeUpvaW5BbGlhc2VzXG4gIGpvaW5zOiBCdWlsZFF1ZXJ5Sm9pbnNcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHBhdGhTZWdtZW50czogc3RyaW5nW11cbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICBzZWxlY3RGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdlbmVyaWNDb2x1bW4+XG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBjcmVhdGluZyBhIG5ldyB0YWJsZSBuYW1lIGZvciBhcnJheXMgYW5kIGJsb2NrcywgdGhpcyBzdWZmaXggc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSB0YWJsZSBuYW1lXG4gICAqL1xuICB0YWJsZU5hbWVTdWZmaXg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSByYXcgdmFsdWUgb2YgdGhlIHF1ZXJ5IGJlZm9yZSBzYW5pdGl6YXRpb25cbiAgICovXG4gIHZhbHVlOiB1bmtub3duXG59XG4vKipcbiAqIFRyYW5zZm9ybXMgcGF0aCB0byB0YWJsZSBhbmQgY29sdW1uIG5hbWVcbiAqIEFkZHMgdGFibGVzIHRvIGBqb2luYFxuICogQHJldHVybnMgVGFibGVDb2x1bW5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhYmxlQ29sdW1uRnJvbVBhdGggPSAoe1xuICBhZGFwdGVyLFxuICBhbGlhc1RhYmxlLFxuICBjb2xsZWN0aW9uUGF0aCxcbiAgY29sdW1uUHJlZml4ID0gJycsXG4gIGNvbnN0cmFpbnRQYXRoOiBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoLFxuICBjb25zdHJhaW50cyA9IFtdLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlOiBpbmNvbWluZ0xvY2FsZSxcbiAgcGF0aFNlZ21lbnRzOiBpbmNvbWluZ1NlZ21lbnRzLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHNlbGVjdEZpZWxkcyxcbiAgdGFibGVOYW1lLFxuICB0YWJsZU5hbWVTdWZmaXggPSAnJyxcbiAgdmFsdWUsXG59OiBBcmdzKTogVGFibGVDb2x1bW4gPT4ge1xuICBjb25zdCBmaWVsZFBhdGggPSBpbmNvbWluZ1NlZ21lbnRzWzBdXG4gIGxldCBsb2NhbGUgPSBpbmNvbWluZ0xvY2FsZVxuICBjb25zdCByb290VGFibGVOYW1lID0gaW5jb21pbmdSb290VGFibGVOYW1lIHx8IHRhYmxlTmFtZVxuICBsZXQgY29uc3RyYWludFBhdGggPSBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoIHx8ICcnXG5cbiAgY29uc3QgZmllbGQgPSBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzIGFzIEZpZWxkW10pLmZpbmQoXG4gICAgKGZpZWxkVG9GaW5kKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkVG9GaW5kKSAmJiBmaWVsZFRvRmluZC5uYW1lID09PSBmaWVsZFBhdGgsXG4gICkgYXMgRmllbGQgfCBUYWJBc0ZpZWxkXG4gIGxldCBuZXdUYWJsZU5hbWUgPSB0YWJsZU5hbWVcblxuICBpZiAoIWZpZWxkICYmIGZpZWxkUGF0aCA9PT0gJ2lkJykge1xuICAgIHNlbGVjdEZpZWxkcy5pZCA9IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uaWRcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uTmFtZTogJ2lkJyxcbiAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgZmllbGQ6IHtcbiAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgdHlwZTogYWRhcHRlci5pZFR5cGUgPT09ICd1dWlkJyA/ICd0ZXh0JyA6ICdudW1iZXInLFxuICAgICAgfSBhcyBUZXh0RmllbGQgfCBOdW1iZXJGaWVsZCxcbiAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZCkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IFsuLi5pbmNvbWluZ1NlZ21lbnRzXVxuXG4gICAgLy8gSWYgbmV4dCBzZWdtZW50IGlzIGEgbG9jYWxlLFxuICAgIC8vIHdlIG5lZWQgdG8gdGFrZSBpdCBvdXQgYW5kIHVzZSBpdCBhcyB0aGUgbG9jYWxlIGZyb20gdGhpcyBwb2ludCBvblxuICAgIGlmICgnbG9jYWxpemVkJyBpbiBmaWVsZCAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5maW5kKFxuICAgICAgICAobG9jYWxlKSA9PiBsb2NhbGUgPT09IHBhdGhTZWdtZW50c1sxXSxcbiAgICAgIClcblxuICAgICAgaWYgKG1hdGNoZWRMb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gbWF0Y2hlZExvY2FsZVxuICAgICAgICBwYXRoU2VnbWVudHMuc3BsaWNlKDEsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7XG4gICAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZVN1ZmZpeCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUoZmllbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRQYXRoOiBgJHtjb25zdHJhaW50UGF0aH0ke2ZpZWxkLm5hbWV9LmAsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgICBqb2lucyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgdGFibGVOYW1lU3VmZml4OiBgJHt0YWJsZU5hbWVTdWZmaXh9JHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1fYCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZVN1ZmZpeCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZ3JvdXAnOiB7XG4gICAgICAgIGlmIChsb2NhbGUgJiYgZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9sb2NhbGVzYFxuXG4gICAgICAgICAgam9pbnNbdGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaCh7XG4gICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBsb2NhbGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aDogYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfS5gLFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWVTdWZmaXg6IGAke3RhYmxlTmFtZVN1ZmZpeH0ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfV9gLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV8ke3RhYmxlTmFtZVN1ZmZpeH0ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWBcbiAgICAgICAgY29uc3RyYWludFBhdGggPSBgJHtjb25zdHJhaW50UGF0aH0ke2ZpZWxkLm5hbWV9LiUuYFxuICAgICAgICBpZiAobG9jYWxlICYmIGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBhbmQoXG4gICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCksXG4gICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9sb2NhbGUsIGxvY2FsZSksXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChsb2NhbGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19sb2NhbGUnLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGxldCBibG9ja1RhYmxlQ29sdW1uOiBUYWJsZUNvbHVtblxuICAgICAgICBsZXQgbmV3VGFibGVOYW1lOiBzdHJpbmdcblxuICAgICAgICAvLyBoYW5kbGUgYmxvY2tUeXBlIHF1ZXJpZXNcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50c1sxXSA9PT0gJ2Jsb2NrVHlwZScpIHtcbiAgICAgICAgICAvLyBmaW5kIHRoZSBibG9jayBjb25maWcgdXNpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdXG4gICAgICAgICAgYmxvY2tUeXBlcy5mb3JFYWNoKChibG9ja1R5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gZmllbGQuYmxvY2tzLmZpbmQoKGJsb2NrKSA9PiBibG9jay5zbHVnID09PSBibG9ja1R5cGUpXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19wYXRoJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXRoU2VnbWVudHNbMF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKCkgPT4gJ2lkJyxcbiAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc0Jsb2NrRmllbGQgPSBmaWVsZC5ibG9ja3Muc29tZSgoYmxvY2spID0+IHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCA9IGAke2NvbnN0cmFpbnRQYXRofSR7ZmllbGQubmFtZX0uJS5gXG4gICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgIGNvbnN0IGJsb2NrQ29uc3RyYWludHMgPSBbXVxuICAgICAgICAgIGNvbnN0IGJsb2NrU2VsZWN0RmllbGRzID0ge31cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHM6IGJsb2NrQ29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHNlbGVjdEZpZWxkczogYmxvY2tTZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgZmluZSwgbm90IGV2ZXJ5IGJsb2NrIHdpbGwgaGF2ZSB0aGUgZmllbGRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBibG9ja1RhYmxlQ29sdW1uID0gcmVzdWx0XG4gICAgICAgICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50cy5jb25jYXQoYmxvY2tDb25zdHJhaW50cylcbiAgICAgICAgICBzZWxlY3RGaWVsZHMgPSB7IC4uLnNlbGVjdEZpZWxkcywgLi4uYmxvY2tTZWxlY3RGaWVsZHMgfVxuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBhbmQoXG4gICAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKSxcbiAgICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fbG9jYWxlLCBsb2NhbGUpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGhhc0Jsb2NrRmllbGQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uTmFtZTogYmxvY2tUYWJsZUNvbHVtbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICBmaWVsZDogYmxvY2tUYWJsZUNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcmF3Q29sdW1uOiBibG9ja1RhYmxlQ29sdW1uLnJhd0NvbHVtbixcbiAgICAgICAgICAgIHRhYmxlOiBibG9ja1RhYmxlQ29sdW1uLnRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOlxuICAgICAgY2FzZSAndXBsb2FkJzoge1xuICAgICAgICBsZXQgcmVsYXRpb25zaGlwRmllbGRzXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fcmVsc2BcbiAgICAgICAgY29uc3QgbmV3Q29sbGVjdGlvblBhdGggPSBwYXRoU2VnbWVudHMuc2xpY2UoMSkuam9pbignLicpXG4gICAgICAgIGNvbnN0IGFsaWFzUmVsYXRpb25zaGlwVGFibGVOYW1lID0gdXVpZCgpXG4gICAgICAgIGNvbnN0IGFsaWFzUmVsYXRpb25zaGlwVGFibGUgPSBhbGlhcyhcbiAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvblRhYmxlTmFtZV0sXG4gICAgICAgICAgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUsXG4gICAgICAgIClcblxuICAgICAgICAvLyBKb2luIGluIHRoZSByZWxhdGlvbnNoaXBzIHRhYmxlXG4gICAgICAgIGpvaW5BbGlhc2VzLnB1c2goe1xuICAgICAgICAgIGNvbmRpdGlvbjogYW5kKFxuICAgICAgICAgICAgZXEoKGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0pLmlkLCBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLnBhcmVudCksXG4gICAgICAgICAgICBsaWtlKGFsaWFzUmVsYXRpb25zaGlwVGFibGUucGF0aCwgYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfWApLFxuICAgICAgICAgICksXG4gICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2VsZWN0RmllbGRzW2Ake3JlbGF0aW9uVGFibGVOYW1lfS5wYXRoYF0gPSBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLnBhdGhcblxuICAgICAgICBsZXQgbmV3QWxpYXNUYWJsZVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQucmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0b1NuYWtlQ2FzZShmaWVsZC5yZWxhdGlvblRvKX1gXG4gICAgICAgICAgLy8gcGFyZW50IHRvIHJlbGF0aW9uc2hpcCBqb2luIHRhYmxlXG4gICAgICAgICAgcmVsYXRpb25zaGlwRmllbGRzID0gYWRhcHRlci5wYXlsb2FkLmNvbGxlY3Rpb25zW2ZpZWxkLnJlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgICAgIG5ld0FsaWFzVGFibGUgPSBhbGlhcyhhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLCB0b1NuYWtlQ2FzZSh1dWlkKCkpKVxuXG4gICAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgICBjb25kaXRpb246IGVxKG5ld0FsaWFzVGFibGUuaWQsIGFsaWFzUmVsYXRpb25zaGlwVGFibGVbYCR7ZmllbGQucmVsYXRpb25Ub31JRGBdKSxcbiAgICAgICAgICAgIHRhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICcnIHx8IG5ld0NvbGxlY3Rpb25QYXRoID09PSAnaWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtmaWVsZC5yZWxhdGlvblRvfUlEYCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnNOYW1lcyA9IGZpZWxkLnJlbGF0aW9uVG8ubWFwKFxuICAgICAgICAgICAgKHJlbGF0aW9uVG8pID0+IGBcIiR7YWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWV9XCIuXCIke3RvU25ha2VDYXNlKHJlbGF0aW9uVG8pfV9pZFwiYCxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICByYXdDb2x1bW46IHNxbC5yYXcoYENPQUxFU0NFKCR7dGFibGVDb2x1bW5zTmFtZXMuam9pbignLCAnKX0pYCksXG4gICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICdyZWxhdGlvblRvJykge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uVG8gPSBBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pID8gZmllbGQucmVsYXRpb25UbyA6IFtmaWVsZC5yZWxhdGlvblRvXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVsYXRpb24gPSByZWxhdGlvblRvLmZpbmQoKHJlbGF0aW9uKSA9PiByZWxhdGlvbiA9PT0gdmFsKVxuICAgICAgICAgICAgICBpZiAobWF0Y2hlZFJlbGF0aW9uKSByZXR1cm4gYCR7bWF0Y2hlZFJlbGF0aW9ufUlEYFxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcignTm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoOiBuZXdDb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IHJlbGF0aW9uc2hpcEZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGl6ZWQsIHdlIGdvIHRvIGxvY2FsaXplZCB0YWJsZSBhbmQgc2V0IGFsaWFzVGFibGUgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBzbyBpdCBpcyBub3QgcGlja2VkIHVwIGJlbG93IHRvIGJlIHVzZWQgYXMgdGFyZ2V0VGFibGVcbiAgICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50VGFibGUgPSBhbGlhc1RhYmxlIHx8IGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV1cblxuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKHBhcmVudFRhYmxlLmlkLCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRClcblxuICAgICAgICAgICAgYWxpYXNUYWJsZSA9IHVuZGVmaW5lZFxuXG4gICAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRUYWJsZSA9IGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXVxuXG4gICAgICAgICAgc2VsZWN0RmllbGRzW2Ake25ld1RhYmxlTmFtZX0uJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWBdID1cbiAgICAgICAgICAgIHRhcmdldFRhYmxlW2Ake2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YF1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWAsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzLFxuICAgICAgICAgICAgdGFibGU6IHRhcmdldFRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBBUElFcnJvcihgQ2Fubm90IGZpbmQgZmllbGQgZm9yIHBhdGggYXQgJHtmaWVsZFBhdGh9YClcbn1cbiJdLCJuYW1lcyI6WyJhbmQiLCJlcSIsImxpa2UiLCJzcWwiLCJhbGlhcyIsIkFQSUVycm9yIiwiZmllbGRBZmZlY3RzRGF0YSIsInRhYkhhc05hbWUiLCJmbGF0dGVuVG9wTGV2ZWxGaWVsZHMiLCJ0b1NuYWtlQ2FzZSIsInY0IiwidXVpZCIsImdldFRhYmxlQ29sdW1uRnJvbVBhdGgiLCJhZGFwdGVyIiwiYWxpYXNUYWJsZSIsImNvbGxlY3Rpb25QYXRoIiwiY29sdW1uUHJlZml4IiwiY29uc3RyYWludFBhdGgiLCJpbmNvbWluZ0NvbnN0cmFpbnRQYXRoIiwiY29uc3RyYWludHMiLCJmaWVsZHMiLCJqb2luQWxpYXNlcyIsImpvaW5zIiwibG9jYWxlIiwiaW5jb21pbmdMb2NhbGUiLCJwYXRoU2VnbWVudHMiLCJpbmNvbWluZ1NlZ21lbnRzIiwicm9vdFRhYmxlTmFtZSIsImluY29taW5nUm9vdFRhYmxlTmFtZSIsInNlbGVjdEZpZWxkcyIsInRhYmxlTmFtZSIsInRhYmxlTmFtZVN1ZmZpeCIsInZhbHVlIiwiZmllbGRQYXRoIiwiZmllbGQiLCJmaW5kIiwiZmllbGRUb0ZpbmQiLCJuYW1lIiwibmV3VGFibGVOYW1lIiwiaWQiLCJ0YWJsZXMiLCJjb2x1bW5OYW1lIiwidHlwZSIsImlkVHlwZSIsInRhYmxlIiwibG9jYWxpemVkIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsIm1hdGNoZWRMb2NhbGUiLCJsb2NhbGVDb2RlcyIsInNwbGljZSIsInRhYnMiLCJtYXAiLCJ0YWIiLCJzbGljZSIsIl9wYXJlbnRJRCIsInB1c2giLCJfbG9jYWxlIiwiYmxvY2tUYWJsZUNvbHVtbiIsImJsb2NrVHlwZXMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiYmxvY2tUeXBlIiwiYmxvY2siLCJibG9ja3MiLCJzbHVnIiwiZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUiLCJoYXNCbG9ja0ZpZWxkIiwic29tZSIsInJlc3VsdCIsImJsb2NrQ29uc3RyYWludHMiLCJibG9ja1NlbGVjdEZpZWxkcyIsImVycm9yIiwiY29uY2F0IiwicmF3Q29sdW1uIiwicmVsYXRpb25zaGlwRmllbGRzIiwicmVsYXRpb25UYWJsZU5hbWUiLCJuZXdDb2xsZWN0aW9uUGF0aCIsImpvaW4iLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSIsImFsaWFzUmVsYXRpb25zaGlwVGFibGUiLCJjb25kaXRpb24iLCJwYXJlbnQiLCJwYXRoIiwibmV3QWxpYXNUYWJsZSIsInJlbGF0aW9uVG8iLCJjb2xsZWN0aW9ucyIsInRhYmxlQ29sdW1uc05hbWVzIiwicmF3IiwidmFsIiwibWF0Y2hlZFJlbGF0aW9uIiwicmVsYXRpb24iLCJ1bmRlZmluZWQiLCJwYXJlbnRUYWJsZSIsInRhcmdldFRhYmxlIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0MsR0FLcEMsU0FBU0EsR0FBRyxFQUFFQyxFQUFFLEVBQUVDLElBQUksRUFBRUMsR0FBRyxRQUFRLGNBQWE7QUFDaEQsU0FBU0MsS0FBSyxRQUFRLHNCQUFxQjtBQUMzQyxTQUFTQyxRQUFRLFFBQVEsaUJBQWdCO0FBQ3pDLFNBQVNDLGdCQUFnQixFQUFFQyxVQUFVLFFBQVEsZ0JBQWU7QUFDNUQsU0FBU0MscUJBQXFCLFFBQVEsb0JBQW1CO0FBQ3pELE9BQU9DLGlCQUFpQixnQkFBZTtBQUN2QyxTQUFTQyxNQUFNQyxJQUFJLFFBQVEsT0FBTTtBQTZDakM7Ozs7Q0FJQyxHQUNE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
@@ -1,34 +1,24 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "operatorMap", {
6
- enumerable: true,
7
- get: function() {
8
- return operatorMap;
9
- }
10
- });
11
- const _drizzleorm = require("drizzle-orm");
12
- const operatorMap = {
1
+ import { and, eq, gt, gte, ilike, inArray, isNotNull, isNull, lt, lte, ne, notInArray, or } from 'drizzle-orm';
2
+ export const operatorMap = {
13
3
  // intersects: intersects,
14
- and: _drizzleorm.and,
15
- contains: _drizzleorm.ilike,
16
- equals: _drizzleorm.eq,
17
- exists: _drizzleorm.isNotNull,
18
- greater_than: _drizzleorm.gt,
19
- greater_than_equal: _drizzleorm.gte,
20
- in: _drizzleorm.inArray,
21
- isNull: _drizzleorm.isNull,
22
- less_than: _drizzleorm.lt,
23
- less_than_equal: _drizzleorm.lte,
24
- like: _drizzleorm.ilike,
25
- not_equals: _drizzleorm.ne,
4
+ and,
5
+ contains: ilike,
6
+ equals: eq,
7
+ exists: isNotNull,
8
+ greater_than: gt,
9
+ greater_than_equal: gte,
10
+ in: inArray,
11
+ isNull,
12
+ less_than: lt,
13
+ less_than_equal: lte,
14
+ like: ilike,
15
+ not_equals: ne,
26
16
  // TODO: geojson queries
27
17
  // near: near,
28
18
  // within: within,
29
19
  // all: all,
30
- not_in: _drizzleorm.notInArray,
31
- or: _drizzleorm.or
20
+ not_in: notInArray,
21
+ or
32
22
  };
33
23
 
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL29wZXJhdG9yTWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFuZCxcbiAgZXEsXG4gIGd0LFxuICBndGUsXG4gIGlsaWtlLFxuICBpbkFycmF5LFxuICBpc05vdE51bGwsXG4gIGlzTnVsbCxcbiAgbHQsXG4gIGx0ZSxcbiAgbmUsXG4gIG5vdEluQXJyYXksXG4gIG9yLFxufSBmcm9tICdkcml6emxlLW9ybSdcblxuZXhwb3J0IGNvbnN0IG9wZXJhdG9yTWFwID0ge1xuICAvLyBpbnRlcnNlY3RzOiBpbnRlcnNlY3RzLFxuICBhbmQsXG4gIGNvbnRhaW5zOiBpbGlrZSxcbiAgZXF1YWxzOiBlcSxcbiAgZXhpc3RzOiBpc05vdE51bGwsXG4gIGdyZWF0ZXJfdGhhbjogZ3QsXG4gIGdyZWF0ZXJfdGhhbl9lcXVhbDogZ3RlLFxuICBpbjogaW5BcnJheSxcbiAgaXNOdWxsLCAvLyBoYW5kbGVzIGV4aXN0czogZmFsc2VcbiAgbGVzc190aGFuOiBsdCxcbiAgbGVzc190aGFuX2VxdWFsOiBsdGUsXG4gIGxpa2U6IGlsaWtlLFxuICBub3RfZXF1YWxzOiBuZSxcbiAgLy8gVE9ETzogZ2VvanNvbiBxdWVyaWVzXG4gIC8vIG5lYXI6IG5lYXIsXG4gIC8vIHdpdGhpbjogd2l0aGluLFxuICAvLyBhbGw6IGFsbCxcbiAgbm90X2luOiBub3RJbkFycmF5LFxuICBvcixcbn1cbiJdLCJuYW1lcyI6WyJvcGVyYXRvck1hcCIsImFuZCIsImNvbnRhaW5zIiwiaWxpa2UiLCJlcXVhbHMiLCJlcSIsImV4aXN0cyIsImlzTm90TnVsbCIsImdyZWF0ZXJfdGhhbiIsImd0IiwiZ3JlYXRlcl90aGFuX2VxdWFsIiwiZ3RlIiwiaW4iLCJpbkFycmF5IiwiaXNOdWxsIiwibGVzc190aGFuIiwibHQiLCJsZXNzX3RoYW5fZXF1YWwiLCJsdGUiLCJsaWtlIiwibm90X2VxdWFscyIsIm5lIiwibm90X2luIiwibm90SW5BcnJheSIsIm9yIl0sIm1hcHBpbmdzIjoiOzs7OytCQWdCYUE7OztlQUFBQTs7OzRCQUZOO0FBRUEsTUFBTUEsY0FBYztJQUN6QiwwQkFBMEI7SUFDMUJDLEtBQUFBLGVBQUc7SUFDSEMsVUFBVUMsaUJBQUs7SUFDZkMsUUFBUUMsY0FBRTtJQUNWQyxRQUFRQyxxQkFBUztJQUNqQkMsY0FBY0MsY0FBRTtJQUNoQkMsb0JBQW9CQyxlQUFHO0lBQ3ZCQyxJQUFJQyxtQkFBTztJQUNYQyxRQUFBQSxrQkFBTTtJQUNOQyxXQUFXQyxjQUFFO0lBQ2JDLGlCQUFpQkMsZUFBRztJQUNwQkMsTUFBTWhCLGlCQUFLO0lBQ1hpQixZQUFZQyxjQUFFO0lBQ2Qsd0JBQXdCO0lBQ3hCLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsWUFBWTtJQUNaQyxRQUFRQyxzQkFBVTtJQUNsQkMsSUFBQUEsY0FBRTtBQUNKIn0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL29wZXJhdG9yTWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFuZCxcbiAgZXEsXG4gIGd0LFxuICBndGUsXG4gIGlsaWtlLFxuICBpbkFycmF5LFxuICBpc05vdE51bGwsXG4gIGlzTnVsbCxcbiAgbHQsXG4gIGx0ZSxcbiAgbmUsXG4gIG5vdEluQXJyYXksXG4gIG9yLFxufSBmcm9tICdkcml6emxlLW9ybSdcblxuZXhwb3J0IGNvbnN0IG9wZXJhdG9yTWFwID0ge1xuICAvLyBpbnRlcnNlY3RzOiBpbnRlcnNlY3RzLFxuICBhbmQsXG4gIGNvbnRhaW5zOiBpbGlrZSxcbiAgZXF1YWxzOiBlcSxcbiAgZXhpc3RzOiBpc05vdE51bGwsXG4gIGdyZWF0ZXJfdGhhbjogZ3QsXG4gIGdyZWF0ZXJfdGhhbl9lcXVhbDogZ3RlLFxuICBpbjogaW5BcnJheSxcbiAgaXNOdWxsLCAvLyBoYW5kbGVzIGV4aXN0czogZmFsc2VcbiAgbGVzc190aGFuOiBsdCxcbiAgbGVzc190aGFuX2VxdWFsOiBsdGUsXG4gIGxpa2U6IGlsaWtlLFxuICBub3RfZXF1YWxzOiBuZSxcbiAgLy8gVE9ETzogZ2VvanNvbiBxdWVyaWVzXG4gIC8vIG5lYXI6IG5lYXIsXG4gIC8vIHdpdGhpbjogd2l0aGluLFxuICAvLyBhbGw6IGFsbCxcbiAgbm90X2luOiBub3RJbkFycmF5LFxuICBvcixcbn1cbiJdLCJuYW1lcyI6WyJhbmQiLCJlcSIsImd0IiwiZ3RlIiwiaWxpa2UiLCJpbkFycmF5IiwiaXNOb3ROdWxsIiwiaXNOdWxsIiwibHQiLCJsdGUiLCJuZSIsIm5vdEluQXJyYXkiLCJvciIsIm9wZXJhdG9yTWFwIiwiY29udGFpbnMiLCJlcXVhbHMiLCJleGlzdHMiLCJncmVhdGVyX3RoYW4iLCJncmVhdGVyX3RoYW5fZXF1YWwiLCJpbiIsImxlc3NfdGhhbiIsImxlc3NfdGhhbl9lcXVhbCIsImxpa2UiLCJub3RfZXF1YWxzIiwibm90X2luIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxHQUFHLEVBQ0hDLEVBQUUsRUFDRkMsRUFBRSxFQUNGQyxHQUFHLEVBQ0hDLEtBQUssRUFDTEMsT0FBTyxFQUNQQyxTQUFTLEVBQ1RDLE1BQU0sRUFDTkMsRUFBRSxFQUNGQyxHQUFHLEVBQ0hDLEVBQUUsRUFDRkMsVUFBVSxFQUNWQyxFQUFFLFFBQ0csY0FBYTtBQUVwQixPQUFPLE1BQU1DLGNBQWM7SUFDekIsMEJBQTBCO0lBQzFCYjtJQUNBYyxVQUFVVjtJQUNWVyxRQUFRZDtJQUNSZSxRQUFRVjtJQUNSVyxjQUFjZjtJQUNkZ0Isb0JBQW9CZjtJQUNwQmdCLElBQUlkO0lBQ0pFO0lBQ0FhLFdBQVdaO0lBQ1hhLGlCQUFpQlo7SUFDakJhLE1BQU1sQjtJQUNObUIsWUFBWWI7SUFDWix3QkFBd0I7SUFDeEIsY0FBYztJQUNkLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1pjLFFBQVFiO0lBQ1JDO0FBQ0YsRUFBQyJ9