@sumaris-net/ngx-components 2.4.0-rc2 → 2.4.0-rc3

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.
@@ -62,11 +62,11 @@ export class EntitiesStorage extends StartableService {
62
62
  return defer(() => this.ready())
63
63
  .pipe(switchMap(() => this.watchAll(entityName, variables, opts))); // Loop
64
64
  }
65
- this.progressBarService.increase();
65
+ this.progressBarService?.increase();
66
66
  const storeName = variables && variables.trash ? (EntitiesStorage.TRASH_PREFIX + entityName) : entityName;
67
67
  const result = this.getEntityStore(storeName, { create: true })
68
68
  .watchAll(variables, opts);
69
- result.pipe(first()).subscribe(() => this.progressBarService.decrease());
69
+ result.pipe(first()).subscribe(() => this.progressBarService?.decrease());
70
70
  return result;
71
71
  }
72
72
  async loadAll(entityName, variables, opts) {
@@ -74,7 +74,7 @@ export class EntitiesStorage extends StartableService {
74
74
  if (!this.started)
75
75
  await this.ready();
76
76
  try {
77
- this.progressBarService.increase();
77
+ this.progressBarService?.increase();
78
78
  if (this._debug)
79
79
  console.debug(`[entities-storage] Loading ${entityName}...`);
80
80
  const entityStore = this.getEntityStore(entityName, { create: false });
@@ -83,20 +83,20 @@ export class EntitiesStorage extends StartableService {
83
83
  return entityStore.loadAll(variables, opts);
84
84
  }
85
85
  finally {
86
- this.progressBarService.decrease();
86
+ this.progressBarService?.decrease();
87
87
  }
88
88
  }
89
89
  async load(id, entityName, opts) {
90
90
  await this.ready();
91
91
  try {
92
- this.progressBarService.increase();
92
+ this.progressBarService?.increase();
93
93
  const entityStore = this.getEntityStore(entityName, { create: false });
94
94
  if (!entityStore)
95
95
  return undefined;
96
96
  return await entityStore.load(id, opts);
97
97
  }
98
98
  finally {
99
- this.progressBarService.decrease();
99
+ this.progressBarService?.decrease();
100
100
  }
101
101
  }
102
102
  async nextValue(entityOrName) {
@@ -127,7 +127,7 @@ export class EntitiesStorage extends StartableService {
127
127
  if (!this.started)
128
128
  await this.ready();
129
129
  try {
130
- this.progressBarService.increase();
130
+ this.progressBarService?.increase();
131
131
  this._dirty = true;
132
132
  const storeName = opts && opts.entityName || this.detectEntityName(entity);
133
133
  this.getEntityStore(storeName)
@@ -137,7 +137,7 @@ export class EntitiesStorage extends StartableService {
137
137
  return entity;
138
138
  }
139
139
  finally {
140
- this.progressBarService.decrease();
140
+ this.progressBarService?.decrease();
141
141
  }
142
142
  }
143
143
  async saveAll(entities, opts) {
@@ -146,13 +146,13 @@ export class EntitiesStorage extends StartableService {
146
146
  if (!this.started)
147
147
  await this.ready();
148
148
  try {
149
- this.progressBarService.increase();
149
+ this.progressBarService?.increase();
150
150
  this._dirty = true;
151
151
  const entityName = opts && opts.entityName || this.detectEntityName(entities[0]);
152
152
  return this.getEntityStore(entityName).saveAll(entities, opts);
153
153
  }
154
154
  finally {
155
- this.progressBarService.decrease();
155
+ this.progressBarService?.decrease();
156
156
  }
157
157
  }
158
158
  async delete(entity, opts) {
@@ -172,7 +172,7 @@ export class EntitiesStorage extends StartableService {
172
172
  throw new Error('Missing argument \'opts\' or \'entityName\'');
173
173
  //if (id >= 0) throw new Error('Invalid id a local entity (not a negative number): ' + id);
174
174
  try {
175
- this.progressBarService.increase();
175
+ this.progressBarService?.increase();
176
176
  const entityStore = this.getEntityStore(opts.entityName, { create: false });
177
177
  if (!entityStore)
178
178
  return undefined;
@@ -187,7 +187,7 @@ export class EntitiesStorage extends StartableService {
187
187
  return deletedEntity;
188
188
  }
189
189
  finally {
190
- this.progressBarService.decrease();
190
+ this.progressBarService?.decrease();
191
191
  }
192
192
  }
193
193
  async deleteMany(ids, opts) {
@@ -196,7 +196,7 @@ export class EntitiesStorage extends StartableService {
196
196
  if (!opts || isNilOrBlank(opts.entityName))
197
197
  throw new Error('Missing argument \'opts\' or \'opts.entityName\'');
198
198
  try {
199
- this.progressBarService.increase();
199
+ this.progressBarService?.increase();
200
200
  const entityStore = this.getEntityStore(opts.entityName, { create: false });
201
201
  if (!entityStore)
202
202
  return undefined;
@@ -212,7 +212,7 @@ export class EntitiesStorage extends StartableService {
212
212
  return deletedEntities;
213
213
  }
214
214
  finally {
215
- this.progressBarService.decrease();
215
+ this.progressBarService?.decrease();
216
216
  }
217
217
  }
218
218
  async deleteFromTrash(entity, opts) {
@@ -348,7 +348,7 @@ export class EntitiesStorage extends StartableService {
348
348
  }
349
349
  this._saving = true;
350
350
  this._dirty = false;
351
- this.progressBarService.increase();
351
+ this.progressBarService?.increase();
352
352
  const entityNames = this._data && Object.keys(this._data) || [];
353
353
  const now = Date.now();
354
354
  if (this._debug)
@@ -385,11 +385,11 @@ export class EntitiesStorage extends StartableService {
385
385
  if (this._debug)
386
386
  console.debug(`[entities-storage] Persisting [OK] ${entityNames.length} stores saved in ${Date.now() - now}ms...`);
387
387
  this._saving = false;
388
- this.progressBarService.decrease();
388
+ this.progressBarService?.decrease();
389
389
  })
390
390
  .catch(err => {
391
391
  this._saving = false;
392
- this.progressBarService.decrease();
392
+ this.progressBarService?.decrease();
393
393
  if (currentEntityName) {
394
394
  console.error(`[entities-storage] Error while persisting ${currentEntityName}`, err);
395
395
  }
@@ -402,12 +402,14 @@ export class EntitiesStorage extends StartableService {
402
402
  }
403
403
  EntitiesStorage.TRASH_PREFIX = 'Trash#';
404
404
  EntitiesStorage.REMOTE_PREFIX = 'Remote#';
405
- EntitiesStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EntitiesStorage, deps: [{ token: i1.Platform }, { token: APP_PROGRESS_BAR_SERVICE }, { token: APP_STORAGE }, { token: ENVIRONMENT }, { token: APP_LOCAL_STORAGE_TYPE_POLICIES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
405
+ EntitiesStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EntitiesStorage, deps: [{ token: i1.Platform }, { token: APP_PROGRESS_BAR_SERVICE, optional: true }, { token: APP_STORAGE }, { token: ENVIRONMENT }, { token: APP_LOCAL_STORAGE_TYPE_POLICIES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
406
406
  EntitiesStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EntitiesStorage, providedIn: 'root' });
407
407
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EntitiesStorage, decorators: [{
408
408
  type: Injectable,
409
409
  args: [{ providedIn: 'root' }]
410
410
  }], ctorParameters: function () { return [{ type: i1.Platform }, { type: undefined, decorators: [{
411
+ type: Optional
412
+ }, {
411
413
  type: Inject,
412
414
  args: [APP_PROGRESS_BAR_SERVICE]
413
415
  }] }, { type: undefined, decorators: [{
@@ -422,4 +424,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
422
424
  type: Inject,
423
425
  args: [APP_LOCAL_STORAGE_TYPE_POLICIES]
424
426
  }] }]; } });
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBNEIsV0FBVyxFQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBQ2pJLE9BQU8sRUFBRSx3QkFBd0IsRUFBdUIsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RyxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQVksTUFBTSxnREFBZ0QsQ0FBQzs7OztBQU92RixNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsMEJBQTBCLENBQUMsQ0FBQztBQUszSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBa0M7SUFnQnJFLFlBQ1UsUUFBa0IsRUFDZ0Isa0JBQXVDLEVBQ3BELE9BQWlCLEVBQ2YsV0FBd0IsRUFDRixZQUF5QztRQUU5RixLQUFLLENBQUMs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WUFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkMsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN0RjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUMvRjtZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQWhnQmUsNEJBQVksR0FBRyxRQUFTLENBQUE7QUFDeEIsNkJBQWEsR0FBRyxTQUFVLENBQUE7NkdBSC9CLGVBQWUsMENBa0JoQix3QkFBd0IsYUFDeEIsV0FBVyxhQUNYLFdBQVcsYUFDQywrQkFBK0I7aUhBckIxQyxlQUFlLGNBREgsTUFBTTs0RkFDbEIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQW1CM0IsTUFBTTsyQkFBQyx3QkFBd0I7OzBCQUMvQixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmVyLCBtZXJnZSwgT2JzZXJ2YWJsZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgZmlyc3QsIHN3aXRjaE1hcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW50aXR5LCBJRW50aXR5IH0gZnJvbSAnLi4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWxPckJsYW5rIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCwgRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zLCBFbnRpdHlTdG9yZSwgRW50aXR5U3RvcmVUeXBlUG9saWN5IH0gZnJvbSAnLi9lbnRpdHktc3RvcmUuY2xhc3MnO1xuaW1wb3J0IHsgQVBQX1BST0dSRVNTX0JBUl9TRVJWSUNFLCBJUHJvZ3Jlc3NCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3Byb2dyZXNzLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IGNoYWluUHJvbWlzZXMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgQVBQX1NUT1JBR0UsIElTdG9yYWdlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0b3JhZ2Uvc3RvcmFnZS51dGlscyc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXMge1xuICBbX190eXBlbmFtZTogc3RyaW5nXTogRW50aXR5U3RvcmVUeXBlUG9saWN5O1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NUT1JBR0VfVFlQRV9QT0xJQ0lFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM+KCdsb2NhbFN0b3JhZ2VUeXBlUG9saWNpZXMnKTtcblxuZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmFnZU1hcCB7IFtrZXk6IHN0cmluZ106IEVudGl0eVN0b3JlPGFueSwgYW55PiB9XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEVudGl0aWVzU3RvcmFnZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8RW50aXR5U3RvcmFnZU1hcD4ge1xuXG4gIHN0YXRpYyByZWFkb25seSBUUkFTSF9QUkVGSVggPSAnVHJhc2gjJztcbiAgc3RhdGljIHJlYWRvbmx5IFJFTU9URV9QUkVGSVggPSAnUmVtb3RlIyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhdmVUaW1lclBlcmlvZDtcblxuICBwcml2YXRlIF8kc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX3NhdmluZyA9IGZhbHNlO1xuXG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlydHkgfHwgT2JqZWN0LnZhbHVlcyh0aGlzLl9kYXRhKS5zb21lKHN0b3JlID0+IHN0b3JlLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBASW5qZWN0KEFQUF9QUk9HUkVTU19CQVJfU0VSVklDRSkgcHJpdmF0ZSBwcm9ncmVzc0JhclNlcnZpY2U6IElQcm9ncmVzc0JhclNlcnZpY2UsXG4gICAgQEluamVjdChBUFBfU1RPUkFHRSkgcHJpdmF0ZSBzdG9yYWdlOiBJU3RvcmFnZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NUT1JBR0VfVFlQRV9QT0xJQ0lFUykgdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXNcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmFnZSk7XG4gICAgdGhpcy5fdHlwZVBvbGljaWVzID0gdHlwZVBvbGljaWVzIHx8IHt9O1xuICAgIHRoaXMuX3NhdmVUaW1lclBlcmlvZCA9IGVudmlyb25tZW50LnN0b3JhZ2VTYXZlUGVyaW9kTXMgfHwgMTAwMDAgLyogPSAxMHMgKi87XG4gICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy1zdG9yYWdlXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuXG4gIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPEVudGl0eVN0b3JhZ2VNYXA+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0aWVzLXN0b3JhZ2VdIFN0YXJ0aW5nIGVudGl0eSBzdG9yYWdlLi4uYCk7XG5cbiAgICAvLyBSZXN0b3JlIHN0b3Jlc1xuICAgIGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcblxuICAgIC8vIFN0YXJ0IGEgc2F2ZSB0aW1lclxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgdGhpcy5fJHNhdmUsXG4gICAgICAgIHRpbWVyKHRoaXMuX3NhdmVUaW1lclBlcmlvZCwgdGhpcy5fc2F2ZVRpbWVyUGVyaW9kKVxuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBBdm9pZCB0byBtYW55IGNhbGwgKGUuZy4gd2hlbiAkc2F2ZSBBTkQgdGltZXIgYXJlIHRyaWdnZXJlZFxuICAgICAgICAgIHRocm90dGxlVGltZSh0aGlzLl9zYXZlVGltZXJQZXJpb2QpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN0b3JlTG9jYWxseSh7c2tpcElmUHJpc3RpbmU6IHRydWV9KSlcbiAgICApO1xuXG4gICAgLy8gU2F2ZSwgd2hlbiBwbGF0Zm9ybSBpcyBpbiBwYXVzZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLnBsYXRmb3JtLnBhdXNlLnN1YnNjcmliZShhc3luYyAoKSAgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy1zdG9yYWdlXSBQbGF0Zm9ybSB3aWxsIHBhdXNlOiBzYXZpbmcuLi5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yZUxvY2FsbHkoe3NraXBJZlByaXN0aW5lOiB0cnVlfSk7XG4gICAgICAgIGNvbnNvbGUud2FybihgW2VudGl0aWVzLXN0b3JhZ2VdIFBsYXRmb3JtIHdpbGwgcGF1c2U6IHNhdmluZyBbT0tdYCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zb2xlLmluZm8oYFtlbnRpdGllcy1zdG9yYWdlXSBTdGFydGluZyBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKSB7XG4gICAgYXdhaXQgdGhpcy5zdG9yZUxvY2FsbHkoe3NraXBJZlByaXN0aW5lOiB0cnVlfSk7XG4gIH1cblxuICB3YXRjaEFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXNoPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuICAgIC8vIE1ha2Ugc3VyZSBzdG9yZSBpcyByZWFkeVxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5yZWFkeSgpKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy53YXRjaEFsbDxUPihlbnRpdHlOYW1lLCB2YXJpYWJsZXMsIG9wdHMpKSk7IC8vIExvb3BcbiAgICB9XG5cbiAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHZhcmlhYmxlcyAmJiB2YXJpYWJsZXMudHJhc2ggPyAoRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWUpIDogZW50aXR5TmFtZTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHN0b3JlTmFtZSwge2NyZWF0ZTogdHJ1ZX0pXG4gICAgICAud2F0Y2hBbGwodmFyaWFibGVzLCBvcHRzKTtcblxuICAgIHJlc3VsdC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsb2FkQWxsPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgLy8gTWFrZSBzdXJlIHN0b3JlIGlzIHJlYWR5XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gTG9hZGluZyAke2VudGl0eU5hbWV9Li4uYCk7XG5cbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihlbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHtkYXRhOiBbXSwgdG90YWw6IDB9OyAvLyBObyBzdG9yZSBmb3IgdGhpcyBlbnRpdHkgbmFtZVxuXG4gICAgICByZXR1cm4gZW50aXR5U3RvcmUubG9hZEFsbCh2YXJpYWJsZXMsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZDxUIGV4dGVuZHMgRW50aXR5PFQ+PihpZDogbnVtYmVyLCBlbnRpdHlOYW1lOiBzdHJpbmcsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcblxuICAgICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KGVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGF3YWl0IGVudGl0eVN0b3JlLmxvYWQoaWQsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmV4dFZhbHVlKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eVN0b3JlKHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpKS5uZXh0VmFsdWUoKTtcbiAgfVxuXG4gIGFzeW5jIG5leHRWYWx1ZXMoZW50aXR5T3JOYW1lOiBzdHJpbmcgfCBhbnksIGVudGl0eUNvdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgY29uc3QgZW50aXR5TmFtZSA9IHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpO1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZShlbnRpdHlOYW1lKTtcbiAgICBjb25zdCBmaXJzdFZhbHVlID0gc3RvcmUubmV4dFZhbHVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRpdHlDb3VudCAtIDE7IGkrKykge1xuICAgICAgc3RvcmUubmV4dFZhbHVlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFJlc2VydmluZyByYW5nZSBbJHtmaXJzdFZhbHVlfSwke3N0b3JlLmN1cnJlbnRWYWx1ZSgpfV0gZm9yICR7ZW50aXR5TmFtZX0ncyBzZXF1ZW5jZWApO1xuICAgIHJldHVybiBmaXJzdFZhbHVlO1xuICB9XG5cbiAgYXN5bmMgY3VycmVudFZhbHVlKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5U3RvcmUodGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eU9yTmFtZSkpLmN1cnJlbnRWYWx1ZSgpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZTxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICBjb25zdCBzdG9yZU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KTtcbiAgICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oc3RvcmVOYW1lKVxuICAgICAgICAuc2F2ZShlbnRpdHksIG9wdHMpO1xuXG4gICAgICAvLyBBc2sgdG8gc2F2ZVxuICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuXG4gICAgICByZXR1cm4gZW50aXR5O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdGllczogVFtdLCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgcmVzZXQ/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpICYmICghb3B0cyB8fCBvcHRzLnJlc2V0ICE9PSB0cnVlKSkgcmV0dXJuIGVudGl0aWVzOyAvLyBTa2lwIChub3RoaW5nIHRvIHNhdmUpXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG5cbiAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVudGl0eU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXRpZXNbMF0pO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSkuc2F2ZUFsbChlbnRpdGllcywgb3B0cyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGU8VCBleHRlbmRzIEVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQnlJZChlbnRpdHkuaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQnlJZDxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihpZDogSUQsIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBpZiAoIW9wdHMgfHwgaXNOaWxPckJsYW5rKG9wdHMuZW50aXR5TmFtZSkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdvcHRzXFwnIG9yIFxcJ2VudGl0eU5hbWVcXCcnKTtcbiAgICAvL2lmIChpZCA+PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWQgYSBsb2NhbCBlbnRpdHkgKG5vdCBhIG5lZ2F0aXZlIG51bWJlcik6ICcgKyBpZCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxULCBJRD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgZGVsZXRlZEVudGl0eSA9IGVudGl0eVN0b3JlLmRlbGV0ZShpZCwgb3B0cyk7XG5cbiAgICAgIC8vIElmIHNvbWV0aGluZyBkZWxldGVkXG4gICAgICBpZiAoZGVsZXRlZEVudGl0eSkge1xuXG4gICAgICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIEFzayB0byBzYXZlXG4gICAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlbGV0ZWRFbnRpdHk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVNYW55PFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGlkczogbnVtYmVyW10sIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGlmICghb3B0cyB8fCBpc05pbE9yQmxhbmsob3B0cy5lbnRpdHlOYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFxcJ29wdHNcXCcgb3IgXFwnb3B0cy5lbnRpdHlOYW1lXFwnJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihvcHRzLmVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBEbyBkZWxldGlvblxuICAgICAgY29uc3QgZGVsZXRlZEVudGl0aWVzID0gZW50aXR5U3RvcmUuZGVsZXRlTWFueShpZHMsIG9wdHMpO1xuXG4gICAgICAvLyBJZiBzb21ldGhpbmcgZGVsZXRlZFxuICAgICAgaWYgKGRlbGV0ZWRFbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gTWFyayBhcyBzYXZlZCBuZWVkXG4gICAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVsZXRlZEVudGl0aWVzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVGcm9tVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUZyb21UcmFzaEJ5SWQoZW50aXR5LmlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZyb21UcmFzaEJ5SWQ8VCBleHRlbmRzIEVudGl0eTxUPj4oaWQ6IG51bWJlciwgb3B0czoge1xuICAgIGVudGl0eU5hbWU6IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0c1xcJyBvciBcXCdlbnRpdHlOYW1lXFwnJyk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWxldGVCeUlkKGlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIG9wdHMuZW50aXR5TmFtZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbW92ZVRvVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgZW50aXR5TmFtZSA9IG9wdHMgJiYgb3B0cy5lbnRpdHlOYW1lIHx8IHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHkpO1xuXG4gICAgLy8gRGVsZXRlIGVudGl0eSBieSBpZCwgaWYgZXhpc3RzXG4gICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KGVudGl0eU5hbWUpO1xuICAgIGlmIChlbnRpdHlTdG9yZSkgZW50aXR5U3RvcmUuZGVsZXRlKGVudGl0eS5pZCwgb3B0cyk7XG5cbiAgICAvLyBDbGVhbiBpZCAoYSBuZXcgaWQgd2lsbCBiZSBzZXQgYnkgdGhlIHRyYXNoIHN0b3JlKVxuICAgIGVudGl0eS5pZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIEFkZCB0byB0cmFzaFxuICAgIGNvbnN0IHRyYXNoTmFtZSA9IEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lO1xuICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4odHJhc2hOYW1lKS5zYXZlKGVudGl0eSwgb3B0cyk7XG5cbiAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgYXN5bmMgbW92ZU1hbnlUb1RyYXNoPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGlkczogbnVtYmVyW10sIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGlmICghb3B0cyB8fCBpc05pbE9yQmxhbmsob3B0cy5lbnRpdHlOYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFxcJ29wdHMuZW50aXR5TmFtZVxcJycpO1xuXG4gICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KG9wdHMuZW50aXR5TmFtZSwge2NyZWF0ZTogZmFsc2V9KTtcbiAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gRG8gZGVsZXRpb25cbiAgICBjb25zdCBkZWxldGVkRW50aXRpZXMgPSBlbnRpdHlTdG9yZS5kZWxldGVNYW55KGlkcywgb3B0cyk7XG5cbiAgICAvLyBJZiBzb21ldGhpbmcgZGVsZXRlZFxuICAgIGlmIChkZWxldGVkRW50aXRpZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAvLyBDbGVhbiBpZHMgKG5ldyBpZHMgd2lsbCBiZSBzZXQgYnkgdGhlIHRyYXNoIHN0b3JlKVxuICAgICAgZGVsZXRlZEVudGl0aWVzLmZvckVhY2goZSA9PiBlLmlkID0gdW5kZWZpbmVkKTtcblxuICAgICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIG9wdHMuZW50aXR5TmFtZTtcbiAgICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4odHJhc2hOYW1lLCB7Y3JlYXRlOiB0cnVlfSlcbiAgICAgICAgLnNhdmVBbGwoZGVsZXRlZEVudGl0aWVzLCBvcHRzKTtcblxuICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAvLyBNYXJrIGFzIHNhdmUgbmVlZFxuICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gIH1cblxuICBhc3luYyBzYXZlVG9UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7IC8vIHNraXBcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG4gICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWU7XG4gICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUpLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhc3luYyBjbGVhclRyYXNoKGVudGl0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgZW50aXR5TmFtZTtcbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmUodHJhc2hOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgZW50aXR5U3RvcmUucmVzZXQoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gIH1cblxuICBwZXJzaXN0KG9wdHMgPSB7c2tpcElmUHJpc3RpbmU6IHRydWV9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmVMb2NhbGx5KG9wdHMpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZ2V0RW50aXR5U3RvcmU8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4obmFtZTogc3RyaW5nLCBvcHRzPzoge1xuICAgIGNyZWF0ZT86IGJvb2xlYW47XG4gIH0pOiBFbnRpdHlTdG9yZTxULCBJRD4ge1xuICAgIGxldCBzdG9yZSA9IHRoaXMuX2RhdGFbbmFtZV07XG4gICAgaWYgKCFzdG9yZSAmJiAoIW9wdHMgfHwgb3B0cy5jcmVhdGUgIT09IGZhbHNlKSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gQ3JlYXRpbmcgc3RvcmUgJHtuYW1lfWApO1xuICAgICAgY29uc3QgdHlwZVBvbGljeSA9IHRoaXMuX3R5cGVQb2xpY2llc1tuYW1lXTtcbiAgICAgIHN0b3JlID0gbmV3IEVudGl0eVN0b3JlPFQsIElEPihuYW1lLCB0aGlzLnN0b3JhZ2UsIHR5cGVQb2xpY3kpO1xuICAgICAgdGhpcy5fZGF0YVtuYW1lXSA9IHN0b3JlO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWU6IHN0cmluZyB8IEVudGl0eTxhbnksIGFueT4pOiBzdHJpbmcge1xuICAgIGlmICghZW50aXR5T3JOYW1lKSB0aHJvdyBFcnJvcignVW5hYmxlIHRvIGRldGVjdCBlbnRpdHlOYW1lIG9mIG9iamVjdDogJyArIGVudGl0eU9yTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBlbnRpdHlPck5hbWUgPT09ICdzdHJpbmcnKSByZXR1cm4gZW50aXR5T3JOYW1lO1xuICAgIGlmIChlbnRpdHlPck5hbWUuX190eXBlbmFtZSkge1xuICAgICAgcmV0dXJuIGVudGl0eU9yTmFtZS5fX3R5cGVuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5T3JOYW1lLmNvbnN0cnVjdG9yLm5hbWUgKyAnVk8nO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCkge1xuXG4gICAgY29uc3QgZW50aXR5TmFtZXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCk7XG4gICAgaWYgKCFlbnRpdHlOYW1lcykgcmV0dXJuO1xuXG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuaW5mbygnW2VudGl0aWVzLXN0b3JhZ2VdIFJlc3RvcmluZyBlbnRpdGllcy4uLicpO1xuICAgIGNvbnN0IGVudGl0aWVzQ291bnQgPSAoYXdhaXQgUHJvbWlzZS5hbGw8bnVtYmVyPihcbiAgICAgIGVudGl0eU5hbWVzXG4gICAgICAgIC5tYXAobmFtZSA9PiB0aGlzLmdldEVudGl0eVN0b3JlPGFueT4obmFtZSkpXG4gICAgICAgIC5tYXAoKHN0b3JlOiBFbnRpdHlTdG9yZTxhbnk+KSA9PiBzdG9yZS5yZXN0b3JlKCkpKVxuICAgICkucmVkdWNlKChyZXMsIGNvdW50KSA9PiAocmVzICsgY291bnQpLCAwKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFJlc3RvcmluZyBlbnRpdGllcyBbT0tdICR7ZW50aXRpZXNDb3VudH0gZW50aXRpZXMgZm91bmQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RvcmVMb2NhbGx5KG9wdHMgPSB7c2tpcElmUHJpc3RpbmU6IHRydWV9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuZGlydHkpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgLy8gU2F2aW5nIHByb2dyZXNzOiByZXBvcnQgdGhpcyBzYXZlIGxhdGVyXG4gICAgaWYgKHRoaXMuX3NhdmluZykge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtc3RvcmFnZV0gUHJldmlvdXMgcGVyc2lzdCBub3QgZmluaXNoZWQuIFdhaXRpbmcuLi4nKTtcbiAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zYXZpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICBjb25zdCBlbnRpdHlOYW1lcyA9IHRoaXMuX2RhdGEgJiYgT2JqZWN0LmtleXModGhpcy5fZGF0YSkgfHwgW107XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2VudGl0aWVzLXN0b3JhZ2VdIFBlcnNpc3RpbmcuLi4nKTtcblxuICAgIGxldCBjdXJyZW50RW50aXR5TmFtZTtcbiAgICByZXR1cm4gY2hhaW5Qcm9taXNlcyhcbiAgICAgIGVudGl0eU5hbWVzLm1hcChlbnRpdHlOYW1lID0+ICgpID0+IHtcbiAgICAgICAgICBjdXJyZW50RW50aXR5TmFtZSA9IGVudGl0eU5hbWU7XG4gICAgICAgICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlKGVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG5cbiAgICAgICAgICBpZiAoIWVudGl0eVN0b3JlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZW50aXR5TmFtZX06IHN0b3JlIG5vdCBmb3VuZCFgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTS2lwIHN0b3JlIGlmIHByaXN0aW5lXG4gICAgICAgICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIWVudGl0eVN0b3JlLmRpcnR5KSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAvLyBQZXJzaXN0IHN0b3JlXG4gICAgICAgICAgcmV0dXJuIGVudGl0eVN0b3JlLnBlcnNpc3Qob3B0cylcbiAgICAgICAgICAgIC50aGVuKGNvdW50ID0+IHtcbiAgICAgICAgICAgICAgLy8gSWYgbm8gZW50aXR5IGZvdW5kLCByZW1vdmUgZnJvbSB0aGUgZW50aXR5IG5hbWVzIGFycmF5XG4gICAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlOYW1lSW5kZXggPSBlbnRpdHlOYW1lcy5maW5kSW5kZXgoZSA9PiBlID09PSBlbnRpdHlOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5TmFtZUluZGV4ICE9PSAtMSkgZW50aXR5TmFtZXMuc3BsaWNlKGVudGl0eU5hbWVJbmRleCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjdXJyZW50RW50aXR5TmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gaXNFbXB0eUFycmF5KGVudGl0eU5hbWVzKSA/XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCkgOlxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldChFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVgsIGVudGl0eU5hbWVzKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFBlcnNpc3RpbmcgW09LXSAke2VudGl0eU5hbWVzLmxlbmd0aH0gc3RvcmVzIHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tcy4uLmApO1xuICAgICAgICB0aGlzLl9zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5fc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgICAgIGlmIChjdXJyZW50RW50aXR5TmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtlbnRpdGllcy1zdG9yYWdlXSBFcnJvciB3aGlsZSBwZXJzaXN0aW5nICR7Y3VycmVudEVudGl0eU5hbWV9YCwgZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtc3RvcmFnZV0gRXJyb3Igd2hpbGUgcGVyc2lzdGluZzogJHtlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyfWAsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfSk7XG4gIH1cblxufVxuIl19
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBNEIsV0FBVyxFQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBQ2pJLE9BQU8sRUFBRSx3QkFBd0IsRUFBdUIsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RyxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQVksTUFBTSxnREFBZ0QsQ0FBQzs7OztBQU92RixNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsMEJBQTBCLENBQUMsQ0FBQztBQUszSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBa0M7SUFnQnJFLFlBQ1UsUUFBa0IsRUFDNEIsa0JBQXVDLEVBQ2hFLE9BQWlCLEVBQ2YsV0FBd0IsRUFDRixZQUF5QztRQUU5RixLQUFLLENBQUMs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WUFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDcEMsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN0RjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUMvRjtZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQWhnQmUsNEJBQVksR0FBRyxRQUFTLENBQUE7QUFDeEIsNkJBQWEsR0FBRyxTQUFVLENBQUE7NkdBSC9CLGVBQWUsMENBa0JKLHdCQUF3Qiw2QkFDcEMsV0FBVyxhQUNYLFdBQVcsYUFDQywrQkFBK0I7aUhBckIxQyxlQUFlLGNBREgsTUFBTTs0RkFDbEIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQW1CM0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx3QkFBd0I7OzBCQUMzQyxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmVyLCBtZXJnZSwgT2JzZXJ2YWJsZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgZmlyc3QsIHN3aXRjaE1hcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW50aXR5LCBJRW50aXR5IH0gZnJvbSAnLi4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWxPckJsYW5rIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCwgRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zLCBFbnRpdHlTdG9yZSwgRW50aXR5U3RvcmVUeXBlUG9saWN5IH0gZnJvbSAnLi9lbnRpdHktc3RvcmUuY2xhc3MnO1xuaW1wb3J0IHsgQVBQX1BST0dSRVNTX0JBUl9TRVJWSUNFLCBJUHJvZ3Jlc3NCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3Byb2dyZXNzLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IGNoYWluUHJvbWlzZXMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgQVBQX1NUT1JBR0UsIElTdG9yYWdlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0b3JhZ2Uvc3RvcmFnZS51dGlscyc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXMge1xuICBbX190eXBlbmFtZTogc3RyaW5nXTogRW50aXR5U3RvcmVUeXBlUG9saWN5O1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NUT1JBR0VfVFlQRV9QT0xJQ0lFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM+KCdsb2NhbFN0b3JhZ2VUeXBlUG9saWNpZXMnKTtcblxuZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmFnZU1hcCB7IFtrZXk6IHN0cmluZ106IEVudGl0eVN0b3JlPGFueSwgYW55PiB9XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEVudGl0aWVzU3RvcmFnZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8RW50aXR5U3RvcmFnZU1hcD4ge1xuXG4gIHN0YXRpYyByZWFkb25seSBUUkFTSF9QUkVGSVggPSAnVHJhc2gjJztcbiAgc3RhdGljIHJlYWRvbmx5IFJFTU9URV9QUkVGSVggPSAnUmVtb3RlIyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhdmVUaW1lclBlcmlvZDtcblxuICBwcml2YXRlIF8kc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX3NhdmluZyA9IGZhbHNlO1xuXG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlydHkgfHwgT2JqZWN0LnZhbHVlcyh0aGlzLl9kYXRhKS5zb21lKHN0b3JlID0+IHN0b3JlLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9QUk9HUkVTU19CQVJfU0VSVklDRSkgcHJpdmF0ZSBwcm9ncmVzc0JhclNlcnZpY2U6IElQcm9ncmVzc0JhclNlcnZpY2UsXG4gICAgQEluamVjdChBUFBfU1RPUkFHRSkgcHJpdmF0ZSBzdG9yYWdlOiBJU3RvcmFnZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NUT1JBR0VfVFlQRV9QT0xJQ0lFUykgdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXNcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmFnZSk7XG4gICAgdGhpcy5fdHlwZVBvbGljaWVzID0gdHlwZVBvbGljaWVzIHx8IHt9O1xuICAgIHRoaXMuX3NhdmVUaW1lclBlcmlvZCA9IGVudmlyb25tZW50LnN0b3JhZ2VTYXZlUGVyaW9kTXMgfHwgMTAwMDAgLyogPSAxMHMgKi87XG4gICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy1zdG9yYWdlXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuXG4gIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPEVudGl0eVN0b3JhZ2VNYXA+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0aWVzLXN0b3JhZ2VdIFN0YXJ0aW5nIGVudGl0eSBzdG9yYWdlLi4uYCk7XG5cbiAgICAvLyBSZXN0b3JlIHN0b3Jlc1xuICAgIGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcblxuICAgIC8vIFN0YXJ0IGEgc2F2ZSB0aW1lclxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgdGhpcy5fJHNhdmUsXG4gICAgICAgIHRpbWVyKHRoaXMuX3NhdmVUaW1lclBlcmlvZCwgdGhpcy5fc2F2ZVRpbWVyUGVyaW9kKVxuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBBdm9pZCB0byBtYW55IGNhbGwgKGUuZy4gd2hlbiAkc2F2ZSBBTkQgdGltZXIgYXJlIHRyaWdnZXJlZFxuICAgICAgICAgIHRocm90dGxlVGltZSh0aGlzLl9zYXZlVGltZXJQZXJpb2QpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN0b3JlTG9jYWxseSh7c2tpcElmUHJpc3RpbmU6IHRydWV9KSlcbiAgICApO1xuXG4gICAgLy8gU2F2ZSwgd2hlbiBwbGF0Zm9ybSBpcyBpbiBwYXVzZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLnBsYXRmb3JtLnBhdXNlLnN1YnNjcmliZShhc3luYyAoKSAgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy1zdG9yYWdlXSBQbGF0Zm9ybSB3aWxsIHBhdXNlOiBzYXZpbmcuLi5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yZUxvY2FsbHkoe3NraXBJZlByaXN0aW5lOiB0cnVlfSk7XG4gICAgICAgIGNvbnNvbGUud2FybihgW2VudGl0aWVzLXN0b3JhZ2VdIFBsYXRmb3JtIHdpbGwgcGF1c2U6IHNhdmluZyBbT0tdYCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zb2xlLmluZm8oYFtlbnRpdGllcy1zdG9yYWdlXSBTdGFydGluZyBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKSB7XG4gICAgYXdhaXQgdGhpcy5zdG9yZUxvY2FsbHkoe3NraXBJZlByaXN0aW5lOiB0cnVlfSk7XG4gIH1cblxuICB3YXRjaEFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXNoPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuICAgIC8vIE1ha2Ugc3VyZSBzdG9yZSBpcyByZWFkeVxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5yZWFkeSgpKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy53YXRjaEFsbDxUPihlbnRpdHlOYW1lLCB2YXJpYWJsZXMsIG9wdHMpKSk7IC8vIExvb3BcbiAgICB9XG5cbiAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZT8uaW5jcmVhc2UoKTtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSB2YXJpYWJsZXMgJiYgdmFyaWFibGVzLnRyYXNoID8gKEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lKSA6IGVudGl0eU5hbWU7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihzdG9yZU5hbWUsIHtjcmVhdGU6IHRydWV9KVxuICAgICAgLndhdGNoQWxsKHZhcmlhYmxlcywgb3B0cyk7XG5cbiAgICByZXN1bHQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wcm9ncmVzc0JhclNlcnZpY2U/LmRlY3JlYXNlKCkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGxvYWRBbGw8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5TmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyPzogKFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICAvLyBNYWtlIHN1cmUgc3RvcmUgaXMgcmVhZHlcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlPy5pbmNyZWFzZSgpO1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gTG9hZGluZyAke2VudGl0eU5hbWV9Li4uYCk7XG5cbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihlbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHtkYXRhOiBbXSwgdG90YWw6IDB9OyAvLyBObyBzdG9yZSBmb3IgdGhpcyBlbnRpdHkgbmFtZVxuXG4gICAgICByZXR1cm4gZW50aXR5U3RvcmUubG9hZEFsbCh2YXJpYWJsZXMsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlPy5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWQ8VCBleHRlbmRzIEVudGl0eTxUPj4oaWQ6IG51bWJlciwgZW50aXR5TmFtZTogc3RyaW5nLCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlPy5pbmNyZWFzZSgpO1xuXG4gICAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSwge2NyZWF0ZTogZmFsc2V9KTtcbiAgICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYXdhaXQgZW50aXR5U3RvcmUubG9hZChpZCwgb3B0cyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2U/LmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmV4dFZhbHVlKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eVN0b3JlKHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpKS5uZXh0VmFsdWUoKTtcbiAgfVxuXG4gIGFzeW5jIG5leHRWYWx1ZXMoZW50aXR5T3JOYW1lOiBzdHJpbmcgfCBhbnksIGVudGl0eUNvdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgY29uc3QgZW50aXR5TmFtZSA9IHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpO1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZShlbnRpdHlOYW1lKTtcbiAgICBjb25zdCBmaXJzdFZhbHVlID0gc3RvcmUubmV4dFZhbHVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRpdHlDb3VudCAtIDE7IGkrKykge1xuICAgICAgc3RvcmUubmV4dFZhbHVlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFJlc2VydmluZyByYW5nZSBbJHtmaXJzdFZhbHVlfSwke3N0b3JlLmN1cnJlbnRWYWx1ZSgpfV0gZm9yICR7ZW50aXR5TmFtZX0ncyBzZXF1ZW5jZWApO1xuICAgIHJldHVybiBmaXJzdFZhbHVlO1xuICB9XG5cbiAgYXN5bmMgY3VycmVudFZhbHVlKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5U3RvcmUodGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eU9yTmFtZSkpLmN1cnJlbnRWYWx1ZSgpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZTxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZT8uaW5jcmVhc2UoKTtcblxuICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgY29uc3Qgc3RvcmVOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG4gICAgICB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHN0b3JlTmFtZSlcbiAgICAgICAgLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgICAgLy8gQXNrIHRvIHNhdmVcbiAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZT8uZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlQWxsPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGVudGl0aWVzOiBUW10sIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICByZXNldD86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShlbnRpdGllcykgJiYgKCFvcHRzIHx8IG9wdHMucmVzZXQgIT09IHRydWUpKSByZXR1cm4gZW50aXRpZXM7IC8vIFNraXAgKG5vdGhpbmcgdG8gc2F2ZSlcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2U/LmluY3JlYXNlKCk7XG5cbiAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVudGl0eU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXRpZXNbMF0pO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSkuc2F2ZUFsbChlbnRpdGllcywgb3B0cyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2U/LmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlPFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUJ5SWQoZW50aXR5LmlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUJ5SWQ8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4oaWQ6IElELCBvcHRzOiB7XG4gICAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0c1xcJyBvciBcXCdlbnRpdHlOYW1lXFwnJyk7XG4gICAgLy9pZiAoaWQgPj0gMCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlkIGEgbG9jYWwgZW50aXR5IChub3QgYSBuZWdhdGl2ZSBudW1iZXIpOiAnICsgaWQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlPy5pbmNyZWFzZSgpO1xuICAgICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQsIElEPihvcHRzLmVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBkZWxldGVkRW50aXR5ID0gZW50aXR5U3RvcmUuZGVsZXRlKGlkLCBvcHRzKTtcblxuICAgICAgLy8gSWYgc29tZXRoaW5nIGRlbGV0ZWRcbiAgICAgIGlmIChkZWxldGVkRW50aXR5KSB7XG5cbiAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gQXNrIHRvIHNhdmVcbiAgICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVsZXRlZEVudGl0eTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZT8uZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVNYW55PFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGlkczogbnVtYmVyW10sIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGlmICghb3B0cyB8fCBpc05pbE9yQmxhbmsob3B0cy5lbnRpdHlOYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFxcJ29wdHNcXCcgb3IgXFwnb3B0cy5lbnRpdHlOYW1lXFwnJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2U/LmluY3JlYXNlKCk7XG4gICAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgLy8gRG8gZGVsZXRpb25cbiAgICAgIGNvbnN0IGRlbGV0ZWRFbnRpdGllcyA9IGVudGl0eVN0b3JlLmRlbGV0ZU1hbnkoaWRzLCBvcHRzKTtcblxuICAgICAgLy8gSWYgc29tZXRoaW5nIGRlbGV0ZWRcbiAgICAgIGlmIChkZWxldGVkRW50aXRpZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIE1hcmsgYXMgc2F2ZWQgbmVlZFxuICAgICAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlbGV0ZWRFbnRpdGllcztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlPy5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZyb21UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlRnJvbVRyYXNoQnlJZChlbnRpdHkuaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRnJvbVRyYXNoQnlJZDxUIGV4dGVuZHMgRW50aXR5PFQ+PihpZDogbnVtYmVyLCBvcHRzOiB7XG4gICAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBpZiAoIW9wdHMgfHwgaXNOaWxPckJsYW5rKG9wdHMuZW50aXR5TmFtZSkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdvcHRzXFwnIG9yIFxcJ2VudGl0eU5hbWVcXCcnKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUJ5SWQoaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgb3B0cy5lbnRpdHlOYW1lXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBtb3ZlVG9UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7IC8vIHNraXBcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG5cbiAgICAvLyBEZWxldGUgZW50aXR5IGJ5IGlkLCBpZiBleGlzdHNcbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSk7XG4gICAgaWYgKGVudGl0eVN0b3JlKSBlbnRpdHlTdG9yZS5kZWxldGUoZW50aXR5LmlkLCBvcHRzKTtcblxuICAgIC8vIENsZWFuIGlkIChhIG5ldyBpZCB3aWxsIGJlIHNldCBieSB0aGUgdHJhc2ggc3RvcmUpXG4gICAgZW50aXR5LmlkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gQWRkIHRvIHRyYXNoXG4gICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWU7XG4gICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUpLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhc3luYyBtb3ZlTWFueVRvVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oaWRzOiBudW1iZXJbXSwgb3B0czoge1xuICAgIGVudGl0eU5hbWU6IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0cy5lbnRpdHlOYW1lXFwnJyk7XG5cbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBEbyBkZWxldGlvblxuICAgIGNvbnN0IGRlbGV0ZWRFbnRpdGllcyA9IGVudGl0eVN0b3JlLmRlbGV0ZU1hbnkoaWRzLCBvcHRzKTtcblxuICAgIC8vIElmIHNvbWV0aGluZyBkZWxldGVkXG4gICAgaWYgKGRlbGV0ZWRFbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgIC8vIENsZWFuIGlkcyAobmV3IGlkcyB3aWxsIGJlIHNldCBieSB0aGUgdHJhc2ggc3RvcmUpXG4gICAgICBkZWxldGVkRW50aXRpZXMuZm9yRWFjaChlID0+IGUuaWQgPSB1bmRlZmluZWQpO1xuXG4gICAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgb3B0cy5lbnRpdHlOYW1lO1xuICAgICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUsIHtjcmVhdGU6IHRydWV9KVxuICAgICAgICAuc2F2ZUFsbChkZWxldGVkRW50aXRpZXMsIG9wdHMpO1xuXG4gICAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAgIC8vIE1hcmsgYXMgc2F2ZSBuZWVkXG4gICAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWRFbnRpdGllcztcbiAgfVxuXG4gIGFzeW5jIHNhdmVUb1RyYXNoPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGVudGl0eTogVCwgb3B0cz86IHtcbiAgICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IGVudGl0eU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KTtcbiAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgZW50aXR5TmFtZTtcbiAgICB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHRyYXNoTmFtZSkuc2F2ZShlbnRpdHksIG9wdHMpO1xuXG4gICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyVHJhc2goZW50aXR5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IHRyYXNoTmFtZSA9IEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lO1xuICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZSh0cmFzaE5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBlbnRpdHlTdG9yZS5yZXNldCgpO1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgfVxuXG4gIHBlcnNpc3Qob3B0cyA9IHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZUxvY2FsbHkob3B0cyk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBnZXRFbnRpdHlTdG9yZTxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihuYW1lOiBzdHJpbmcsIG9wdHM/OiB7XG4gICAgY3JlYXRlPzogYm9vbGVhbjtcbiAgfSk6IEVudGl0eVN0b3JlPFQsIElEPiB7XG4gICAgbGV0IHN0b3JlID0gdGhpcy5fZGF0YVtuYW1lXTtcbiAgICBpZiAoIXN0b3JlICYmICghb3B0cyB8fCBvcHRzLmNyZWF0ZSAhPT0gZmFsc2UpKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy1zdG9yYWdlXSBDcmVhdGluZyBzdG9yZSAke25hbWV9YCk7XG4gICAgICBjb25zdCB0eXBlUG9saWN5ID0gdGhpcy5fdHlwZVBvbGljaWVzW25hbWVdO1xuICAgICAgc3RvcmUgPSBuZXcgRW50aXR5U3RvcmU8VCwgSUQ+KG5hbWUsIHRoaXMuc3RvcmFnZSwgdHlwZVBvbGljeSk7XG4gICAgICB0aGlzLl9kYXRhW25hbWVdID0gc3RvcmU7XG4gICAgfVxuICAgIHJldHVybiBzdG9yZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlY3RFbnRpdHlOYW1lKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgRW50aXR5PGFueSwgYW55Pik6IHN0cmluZyB7XG4gICAgaWYgKCFlbnRpdHlPck5hbWUpIHRocm93IEVycm9yKCdVbmFibGUgdG8gZGV0ZWN0IGVudGl0eU5hbWUgb2Ygb2JqZWN0OiAnICsgZW50aXR5T3JOYW1lKTtcbiAgICBpZiAodHlwZW9mIGVudGl0eU9yTmFtZSA9PT0gJ3N0cmluZycpIHJldHVybiBlbnRpdHlPck5hbWU7XG4gICAgaWYgKGVudGl0eU9yTmFtZS5fX3R5cGVuYW1lKSB7XG4gICAgICByZXR1cm4gZW50aXR5T3JOYW1lLl9fdHlwZW5hbWU7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdHlPck5hbWUuY29uc3RydWN0b3IubmFtZSArICdWTyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKSB7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lcyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYKTtcbiAgICBpZiAoIWVudGl0eU5hbWVzKSByZXR1cm47XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5pbmZvKCdbZW50aXRpZXMtc3RvcmFnZV0gUmVzdG9yaW5nIGVudGl0aWVzLi4uJyk7XG4gICAgY29uc3QgZW50aXRpZXNDb3VudCA9IChhd2FpdCBQcm9taXNlLmFsbDxudW1iZXI+KFxuICAgICAgZW50aXR5TmFtZXNcbiAgICAgICAgLm1hcChuYW1lID0+IHRoaXMuZ2V0RW50aXR5U3RvcmU8YW55PihuYW1lKSlcbiAgICAgICAgLm1hcCgoc3RvcmU6IEVudGl0eVN0b3JlPGFueT4pID0+IHN0b3JlLnJlc3RvcmUoKSkpXG4gICAgKS5yZWR1Y2UoKHJlcywgY291bnQpID0+IChyZXMgKyBjb3VudCksIDApO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gUmVzdG9yaW5nIGVudGl0aWVzIFtPS10gJHtlbnRpdGllc0NvdW50fSBlbnRpdGllcyBmb3VuZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzdG9yZUxvY2FsbHkob3B0cyA9IHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAob3B0cy5za2lwSWZQcmlzdGluZSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuOyAvLyBza2lwXG5cbiAgICAvLyBTYXZpbmcgcHJvZ3Jlc3M6IHJlcG9ydCB0aGlzIHNhdmUgbGF0ZXJcbiAgICBpZiAodGhpcy5fc2F2aW5nKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy1zdG9yYWdlXSBQcmV2aW91cyBwZXJzaXN0IG5vdCBmaW5pc2hlZC4gV2FpdGluZy4uLicpO1xuICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NhdmluZyA9IHRydWU7XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZT8uaW5jcmVhc2UoKTtcbiAgICBjb25zdCBlbnRpdHlOYW1lcyA9IHRoaXMuX2RhdGEgJiYgT2JqZWN0LmtleXModGhpcy5fZGF0YSkgfHwgW107XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2VudGl0aWVzLXN0b3JhZ2VdIFBlcnNpc3RpbmcuLi4nKTtcblxuICAgIGxldCBjdXJyZW50RW50aXR5TmFtZTtcbiAgICByZXR1cm4gY2hhaW5Qcm9taXNlcyhcbiAgICAgIGVudGl0eU5hbWVzLm1hcChlbnRpdHlOYW1lID0+ICgpID0+IHtcbiAgICAgICAgICBjdXJyZW50RW50aXR5TmFtZSA9IGVudGl0eU5hbWU7XG4gICAgICAgICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlKGVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG5cbiAgICAgICAgICBpZiAoIWVudGl0eVN0b3JlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZW50aXR5TmFtZX06IHN0b3JlIG5vdCBmb3VuZCFgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTS2lwIHN0b3JlIGlmIHByaXN0aW5lXG4gICAgICAgICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIWVudGl0eVN0b3JlLmRpcnR5KSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAvLyBQZXJzaXN0IHN0b3JlXG4gICAgICAgICAgcmV0dXJuIGVudGl0eVN0b3JlLnBlcnNpc3Qob3B0cylcbiAgICAgICAgICAgIC50aGVuKGNvdW50ID0+IHtcbiAgICAgICAgICAgICAgLy8gSWYgbm8gZW50aXR5IGZvdW5kLCByZW1vdmUgZnJvbSB0aGUgZW50aXR5IG5hbWVzIGFycmF5XG4gICAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlOYW1lSW5kZXggPSBlbnRpdHlOYW1lcy5maW5kSW5kZXgoZSA9PiBlID09PSBlbnRpdHlOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5TmFtZUluZGV4ICE9PSAtMSkgZW50aXR5TmFtZXMuc3BsaWNlKGVudGl0eU5hbWVJbmRleCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjdXJyZW50RW50aXR5TmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gaXNFbXB0eUFycmF5KGVudGl0eU5hbWVzKSA/XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCkgOlxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldChFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVgsIGVudGl0eU5hbWVzKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFBlcnNpc3RpbmcgW09LXSAke2VudGl0eU5hbWVzLmxlbmd0aH0gc3RvcmVzIHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tcy4uLmApO1xuICAgICAgICB0aGlzLl9zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2U/LmRlY3JlYXNlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHRoaXMuX3NhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZT8uZGVjcmVhc2UoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRFbnRpdHlOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW2VudGl0aWVzLXN0b3JhZ2VdIEVycm9yIHdoaWxlIHBlcnNpc3RpbmcgJHtjdXJyZW50RW50aXR5TmFtZX1gLCBlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtlbnRpdGllcy1zdG9yYWdlXSBFcnJvciB3aGlsZSBwZXJzaXN0aW5nOiAke2VyciAmJiBlcnIubWVzc2FnZSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9KTtcbiAgfVxuXG59XG4iXX0=
@@ -9,7 +9,7 @@ import { DateFromNowPipe } from './pipes/date-from-now.pipe';
9
9
  import { TextMaskModule } from 'angular2-text-mask';
10
10
  import { MatPaginatorIntl } from '@angular/material/paginator';
11
11
  import { MatPaginatorI18n } from './material/paginator/material.paginator-i18n';
12
- import { APP_PROGRESS_BAR_SERVICE, ProgressBarService } from './services/progress-bar.service';
12
+ import { APP_PROGRESS_BAR_SERVICE } from './services/progress-bar.service';
13
13
  import { HTTP_INTERCEPTORS } from '@angular/common/http';
14
14
  import { ProgressInterceptor } from './interceptors/progess.interceptor';
15
15
  import { ColorPickerModule } from 'ngx-color-picker';
@@ -54,7 +54,7 @@ export class SharedModule {
54
54
  { provide: ENVIRONMENT, useValue: environment },
55
55
  // { provide: StorageService, useClass: StorageService, deps: [ENVIRONMENT]},
56
56
  { provide: APP_STORAGE, useExisting: StorageService },
57
- { provide: APP_PROGRESS_BAR_SERVICE, useClass: ProgressBarService },
57
+ // { provide: APP_PROGRESS_BAR_SERVICE, useClass: ProgressBarService },
58
58
  StorageService,
59
59
  AudioProvider,
60
60
  FileService,
@@ -209,4 +209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
209
209
  ]
210
210
  }]
211
211
  }] });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3NoYXJlZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVB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WixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsZUFBZTtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxrQkFBa0I7d0JBRWxCLGNBQWM7d0JBQ2Qsb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixtQkFBbUI7d0JBRW5CLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGVBQWU7cUJBQ2hCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTaGFyZWRNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4vbWF0ZXJpYWwvbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuL3BpcGVzL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgRGF0ZUZyb21Ob3dQaXBlIH0gZnJvbSAnLi9waXBlcy9kYXRlLWZyb20tbm93LnBpcGUnO1xuaW1wb3J0IHsgVGV4dE1hc2tNb2R1bGUgfSBmcm9tICdhbmd1bGFyMi10ZXh0LW1hc2snO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9ySW50bCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JJMThuIH0gZnJvbSAnLi9tYXRlcmlhbC9wYWdpbmF0b3IvbWF0ZXJpYWwucGFnaW5hdG9yLWkxOG4nO1xuaW1wb3J0IHsgQVBQX1BST0dSRVNTX0JBUl9TRVJWSUNFLCBQcm9ncmVzc0JhclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Byb2dyZXNzLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NJbnRlcmNlcHRvciB9IGZyb20gJy4vaW50ZXJjZXB0b3JzL3Byb2dlc3MuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgQ29sb3JQaWNrZXJNb2R1bGUgfSBmcm9tICduZ3gtY29sb3ItcGlja2VyJztcbmltcG9ydCB7IEFwcEZvcm1GaWVsZCB9IGZyb20gJy4vZm9ybS9maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXVkaW9Qcm92aWRlciB9IGZyb20gJy4vYXVkaW8vYXVkaW8nO1xuaW1wb3J0IHsgQ2xvc2VTY3JvbGxTdHJhdGVneSwgRnVsbHNjcmVlbk92ZXJsYXlDb250YWluZXIsIE92ZXJsYXksIE92ZXJsYXlDb250YWluZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBTaGFyZWRIb3RrZXlzTW9kdWxlIH0gZnJvbSAnLi9ob3RrZXlzL3NoYXJlZC1ob3RrZXlzLm1vZHVsZSc7XG5pbXBvcnQgeyBGaWxlU2VydmljZSB9IGZyb20gJy4vZmlsZS9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE1BVF9BVVRPQ09NUExFVEVfREVGQVVMVF9PUFRJT05TLCBNQVRfQVVUT0NPTVBMRVRFX1NDUk9MTF9TVFJBVEVHWSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNQVRfU0VMRUNUX1NDUk9MTF9TVFJBVEVHWSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTaGFyZWREaXJlY3RpdmVzTW9kdWxlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2RpcmVjdGl2ZXMubW9kdWxlJztcbmltcG9ydCB7IFNoYXJlZFBpcGVzTW9kdWxlIH0gZnJvbSAnLi9waXBlcy9waXBlcy5tb2R1bGUnO1xuaW1wb3J0IHsgQXBwTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuL2Zvcm0vbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IERhdGVEaWZmRHVyYXRpb25QaXBlIH0gZnJvbSAnLi9waXBlcy9kYXRlLWRpZmYtZHVyYXRpb24ucGlwZSc7XG5pbXBvcnQgeyBMYXRpdHVkZUZvcm1hdFBpcGUsIExhdExvbmdGb3JtYXRQaXBlLCBMb25naXR1ZGVGb3JtYXRQaXBlIH0gZnJvbSAnLi9waXBlcy9sYXRsb25nLWZvcm1hdC5waXBlJztcbmltcG9ydCB7IEhpZ2hsaWdodFBpcGUgfSBmcm9tICcuL3BpcGVzL2hpZ2hsaWdodC5waXBlJztcbmltcG9ydCB7IE51bWJlckZvcm1hdFBpcGUgfSBmcm9tICcuL3BpcGVzL251bWJlci1mb3JtYXQucGlwZSc7XG5pbXBvcnQgeyBNYXJrZG93bk1vZHVsZSB9IGZyb20gJ25neC1tYXJrZG93bic7XG5pbXBvcnQgeyBBcHBIZWxwTW9kYWwgfSBmcm9tICcuL2hlbHAvaGVscC5tb2RhbCc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgVHJhbnNsYXRlQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RyYW5zbGF0ZS1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0U3RlcHBlckludGwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcbmltcG9ydCB7IE1hdFN0ZXBwZXJJMThuIH0gZnJvbSAnLi9tYXRlcmlhbC9zdGVwcGVyL21hdGVyaWFsLnN0ZXBwZXItaTE4bic7XG5pbXBvcnQgeyBVcGxvYWRGaWxlQ29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkRmlsZVBvcG92ZXIgfSBmcm9tICcuL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNoYXJlZFRlc3RzUGFnZSB9IGZyb20gJy4vdGVzdGluZy90ZXN0cy5wYWdlJztcbmltcG9ydCB7IEFQUF9TVE9SQUdFIH0gZnJvbSAnLi9zZXJ2aWNlcy9zdG9yYWdlL3N0b3JhZ2UudXRpbHMnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3N0b3JhZ2Uvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNoYXJlZFRvb2xiYXJNb2R1bGUgfSBmcm9tICcuL3Rvb2xiYXIvdG9vbGJhci5tb2R1bGUnO1xuaW1wb3J0IHsgTmd4SmRlbnRpY29uTW9kdWxlIH0gZnJvbSAnbmd4LWpkZW50aWNvbic7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbEZhY3Rvcnkob3ZlcmxheTogT3ZlcmxheSk6ICgpID0+IENsb3NlU2Nyb2xsU3RyYXRlZ3kge1xuICByZXR1cm4gKCkgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uaWNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQ29sb3JQaWNrZXJNb2R1bGUsXG4gICAgVGV4dE1hc2tNb2R1bGUsXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXG4gICAgTWFya2Rvd25Nb2R1bGUsXG5cbiAgICAvLyBTdWIgbW9kdWxlc1xuICAgIFNoYXJlZE1hdGVyaWFsTW9kdWxlLFxuICAgIFNoYXJlZERpcmVjdGl2ZXNNb2R1bGUsXG4gICAgU2hhcmVkUGlwZXNNb2R1bGUsXG4gICAgU2hhcmVkSG90a2V5c01vZHVsZSxcbiAgICBTaGFyZWRUb29sYmFyTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIC8vIENvbXBvbmVudHNcbiAgICBBcHBGb3JtRmllbGQsXG4gICAgQXBwTG9hZGluZ1NwaW5uZXIsXG4gICAgQXBwSGVscE1vZGFsLFxuICAgIFVwbG9hZEZpbGVDb21wb25lbnQsXG4gICAgVXBsb2FkRmlsZVBvcG92ZXIsXG4gICAgU2hhcmVkVGVzdHNQYWdlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElvbmljTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIENvbG9yUGlja2VyTW9kdWxlLFxuICAgIFRleHRNYXNrTW9kdWxlLFxuICAgIERyYWdEcm9wTW9kdWxlLFxuICAgIE1hcmtkb3duTW9kdWxlLFxuICAgIE5neEpkZW50aWNvbk1vZHVsZSxcblxuICAgIC8vIFN1Yi1tb2R1bGVzXG4gICAgU2hhcmVkTWF0ZXJpYWxNb2R1bGUsXG4gICAgU2hhcmVkRGlyZWN0aXZlc01vZHVsZSxcbiAgICBTaGFyZWRQaXBlc01vZHVsZSxcbiAgICBTaGFyZWRIb3RrZXlzTW9kdWxlLFxuICAgIFNoYXJlZFRvb2xiYXJNb2R1bGUsXG5cbiAgICAvLyBDb21wb25lbnRzXG4gICAgQXBwRm9ybUZpZWxkLFxuICAgIEFwcExvYWRpbmdTcGlubmVyLFxuICAgIEFwcEhlbHBNb2RhbCxcbiAgICBVcGxvYWRGaWxlQ29tcG9uZW50LFxuICAgIFVwbG9hZEZpbGVQb3BvdmVyLFxuICAgIFNoYXJlZFRlc3RzUGFnZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZE1vZHVsZSB7XG5cbiAgc3RhdGljIGZvclJvb3QoZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KTogTW9kdWxlV2l0aFByb3ZpZGVyczxTaGFyZWRNb2R1bGU+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbc2hhcmVkXSBDcmVhdGluZyBtb2R1bGUgKHJvb3QpJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFNoYXJlZE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuXG4gICAgICAgIHsgcHJvdmlkZTogRU5WSVJPTk1FTlQsIHVzZVZhbHVlOiBlbnZpcm9ubWVudCB9LFxuICAgICAgICAvLyB7IHByb3ZpZGU6IFN0b3JhZ2VTZXJ2aWNlLCB1c2VDbGFzczogU3RvcmFnZVNlcnZpY2UsIGRlcHM6IFtFTlZJUk9OTUVOVF19LFxuICAgICAgICB7IHByb3ZpZGU6IEFQUF9TVE9SQUdFLCB1c2VFeGlzdGluZzogU3RvcmFnZVNlcnZpY2V9LFxuICAgICAgICB7IHByb3ZpZGU6IEFQUF9QUk9HUkVTU19CQVJfU0VSVklDRSwgdXNlQ2xhc3M6IFByb2dyZXNzQmFyU2VydmljZSB9LFxuXG4gICAgICAgIFN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBBdWRpb1Byb3ZpZGVyLFxuICAgICAgICBGaWxlU2VydmljZSxcbiAgICAgICAgVHJhbnNsYXRlQ29udGV4dFNlcnZpY2UsXG4gICAgICAgIERhdGVGb3JtYXRTZXJ2aWNlLFxuXG4gICAgICAgIC8vIEV4cG9ydCBQaXBlcyBhcyBwcm92aWRlcnNcbiAgICAgICAgRGF0ZUZyb21Ob3dQaXBlLFxuICAgICAgICBEYXRlRGlmZkR1cmF0aW9uUGlwZSxcbiAgICAgICAgTGF0TG9uZ0Zvcm1hdFBpcGUsXG4gICAgICAgIExhdGl0dWRlRm9ybWF0UGlwZSxcbiAgICAgICAgTG9uZ2l0dWRlRm9ybWF0UGlwZSxcbiAgICAgICAgSGlnaGxpZ2h0UGlwZSxcbiAgICAgICAgTnVtYmVyRm9ybWF0UGlwZSxcblxuICAgICAgICB7IHByb3ZpZGU6IE92ZXJsYXlDb250YWluZXIsIHVzZUNsYXNzOiBGdWxsc2NyZWVuT3ZlcmxheUNvbnRhaW5lciB9LFxuICAgICAgICB7IHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLCB1c2VDbGFzczogUHJvZ3Jlc3NJbnRlcmNlcHRvciwgbXVsdGk6IHRydWUsIGRlcHM6IFtBUFBfUFJPR1JFU1NfQkFSX1NFUlZJQ0VdIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTWF0UGFnaW5hdG9ySW50bCwgdXNlQ2xhc3M6IE1hdFBhZ2luYXRvckkxOG4sIGRlcHM6IFtUcmFuc2xhdGVTZXJ2aWNlXSB9LFxuICAgICAgICB7IHByb3ZpZGU6IE1hdFN0ZXBwZXJJbnRsLCB1c2VDbGFzczogTWF0U3RlcHBlckkxOG4sIGRlcHM6IFtUcmFuc2xhdGVTZXJ2aWNlXSB9LFxuXG4gICAgICAgIC8vIEZJWE1FOiB0cnkgdG8gZm9yY2UgYSBjdXN0b20gb3ZlcmxheSBmb3IgYXV0b2NvbXBsZXRlLCBiZWNhdXNlIG9mIHRoZXJlIGlzIGEgYnVnIHdoZW4gdXNpbmcgaW5zaWRlIGFuIGlvbmljIG1vZGFsXG4gICAgICAgIC8veyBwcm92aWRlOiBPdmVybGF5LCB1c2VDbGFzczogT3ZlcmxheX0sXG4gICAgICAgIHsgcHJvdmlkZTogTUFUX0FVVE9DT01QTEVURV9TQ1JPTExfU1RSQVRFR1ksIHVzZUZhY3Rvcnk6IHNjcm9sbEZhY3RvcnksIGRlcHM6IFtPdmVybGF5XSB9LFxuICAgICAgICB7IHByb3ZpZGU6IE1BVF9BVVRPQ09NUExFVEVfREVGQVVMVF9PUFRJT05TLCB1c2VWYWx1ZToge1xuICAgICAgICAgICAgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IHByb3ZpZGU6IE1BVF9TRUxFQ1RfU0NST0xMX1NUUkFURUdZLCB1c2VGYWN0b3J5OiBzY3JvbGxGYWN0b3J5LCBkZXBzOiBbT3ZlcmxheV0gfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3NoYXJlZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQXNCLE1BQU0saUNBQWlDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUF1QiwwQkFBMEIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBR25ELE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBZ0I7SUFDNUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQXdERCxNQUFNLE9BQU8sWUFBWTtJQUV2QixNQUFNLENBQUMsT0FBTyxDQUFDLFdBQXdCO1FBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUVqRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLFlBQVk7WUFDdEIsU0FBUyxFQUFFO2dCQUVULEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO2dCQUMvQyw2RUFBNkU7Z0JBQzdFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDO2dCQUNwRCx1RUFBdUU7Z0JBRXZFLGNBQWM7Z0JBQ2QsYUFBYTtnQkFDYixXQUFXO2dCQUNYLHVCQUF1QjtnQkFDdkIsaUJBQWlCO2dCQUVqQiw0QkFBNEI7Z0JBQzVCLGVBQWU7Z0JBQ2Ysb0JBQW9CO2dCQUNwQixpQkFBaUI7Z0JBQ2pCLGtCQUFrQjtnQkFDbEIsbUJBQW1CO2dCQUNuQixhQUFhO2dCQUNiLGdCQUFnQjtnQkFFaEIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLDBCQUEwQixFQUFFO2dCQUNuRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO2dCQUM1RyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDbkYsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFFL0Usb0hBQW9IO2dCQUNwSCx5Q0FBeUM7Z0JBQ3pDLEVBQUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pGLEVBQUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLFFBQVEsRUFBRTt3QkFDbkQscUJBQXFCLEVBQUUsSUFBSTtxQkFDNUI7aUJBQ0Y7Z0JBQ0QsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTthQUNwRjtTQUNGLENBQUM7SUFDSixDQUFDOzswR0E1Q1UsWUFBWTsyR0FBWixZQUFZO1FBbkNyQixhQUFhO1FBQ2IsWUFBWTtRQUNaLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixlQUFlLGFBdkJmLFlBQVk7UUFDWixXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsY0FBYztRQUNkLGNBQWM7UUFDZCxjQUFjO1FBRWQsY0FBYztRQUNkLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixtQkFBbUIsYUFZbkIsWUFBWTtRQUNaLFdBQVc7UUFDWCxlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixjQUFjO1FBQ2QsY0FBYztRQUNkLGNBQWM7UUFDZCxrQkFBa0I7UUFFbEIsY0FBYztRQUNkLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixtQkFBbUI7UUFFbkIsYUFBYTtRQUNiLFlBQVk7UUFDWixpQkFBaUI7UUFDakIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakIsZUFBZTsyR0FHTixZQUFZLFlBcERyQixZQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLGNBQWM7UUFDZCxjQUFjO1FBQ2QsY0FBYztRQUVkLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsc0JBQXNCO1FBQ3RCLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsbUJBQW1CLEVBWW5CLFlBQVk7UUFDWixXQUFXO1FBQ1gsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakIsY0FBYztRQUNkLGNBQWM7UUFDZCxjQUFjO1FBQ2Qsa0JBQWtCO1FBRWxCLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsc0JBQXNCO1FBQ3RCLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsbUJBQW1COzRGQVdWLFlBQVk7a0JBdER4QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGNBQWM7d0JBRWQsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUVsQixjQUFjO3dCQUNkLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUVuQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQixlQUFlO3FCQUNoQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2hhcmVkTWF0ZXJpYWxNb2R1bGUgfSBmcm9tICcuL21hdGVyaWFsL21hdGVyaWFsLm1vZHVsZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IERhdGVGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi9waXBlcy9kYXRlLWZvcm1hdC5waXBlJztcbmltcG9ydCB7IERhdGVGcm9tTm93UGlwZSB9IGZyb20gJy4vcGlwZXMvZGF0ZS1mcm9tLW5vdy5waXBlJztcbmltcG9ydCB7IFRleHRNYXNrTW9kdWxlIH0gZnJvbSAnYW5ndWxhcjItdGV4dC1tYXNrJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvckludGwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9ySTE4biB9IGZyb20gJy4vbWF0ZXJpYWwvcGFnaW5hdG9yL21hdGVyaWFsLnBhZ2luYXRvci1pMThuJztcbmltcG9ydCB7IEFQUF9QUk9HUkVTU19CQVJfU0VSVklDRSwgUHJvZ3Jlc3NCYXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBIVFRQX0lOVEVSQ0VQVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFByb2dyZXNzSW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyY2VwdG9ycy9wcm9nZXNzLmludGVyY2VwdG9yJztcbmltcG9ydCB7IENvbG9yUGlja2VyTW9kdWxlIH0gZnJvbSAnbmd4LWNvbG9yLXBpY2tlcic7XG5pbXBvcnQgeyBBcHBGb3JtRmllbGQgfSBmcm9tICcuL2Zvcm0vZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEF1ZGlvUHJvdmlkZXIgfSBmcm9tICcuL2F1ZGlvL2F1ZGlvJztcbmltcG9ydCB7IENsb3NlU2Nyb2xsU3RyYXRlZ3ksIEZ1bGxzY3JlZW5PdmVybGF5Q29udGFpbmVyLCBPdmVybGF5LCBPdmVybGF5Q29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgU2hhcmVkSG90a2V5c01vZHVsZSB9IGZyb20gJy4vaG90a2V5cy9zaGFyZWQtaG90a2V5cy5tb2R1bGUnO1xuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuL2ZpbGUvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBNQVRfQVVUT0NPTVBMRVRFX0RFRkFVTFRfT1BUSU9OUywgTUFUX0FVVE9DT01QTEVURV9TQ1JPTExfU1RSQVRFR1kgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTUFUX1NFTEVDVF9TQ1JPTExfU1RSQVRFR1kgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgU2hhcmVkRGlyZWN0aXZlc01vZHVsZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9kaXJlY3RpdmVzLm1vZHVsZSc7XG5pbXBvcnQgeyBTaGFyZWRQaXBlc01vZHVsZSB9IGZyb20gJy4vcGlwZXMvcGlwZXMubW9kdWxlJztcbmltcG9ydCB7IEFwcExvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi9mb3JtL2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgeyBEYXRlRGlmZkR1cmF0aW9uUGlwZSB9IGZyb20gJy4vcGlwZXMvZGF0ZS1kaWZmLWR1cmF0aW9uLnBpcGUnO1xuaW1wb3J0IHsgTGF0aXR1ZGVGb3JtYXRQaXBlLCBMYXRMb25nRm9ybWF0UGlwZSwgTG9uZ2l0dWRlRm9ybWF0UGlwZSB9IGZyb20gJy4vcGlwZXMvbGF0bG9uZy1mb3JtYXQucGlwZSc7XG5pbXBvcnQgeyBIaWdobGlnaHRQaXBlIH0gZnJvbSAnLi9waXBlcy9oaWdobGlnaHQucGlwZSc7XG5pbXBvcnQgeyBOdW1iZXJGb3JtYXRQaXBlIH0gZnJvbSAnLi9waXBlcy9udW1iZXItZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgTWFya2Rvd25Nb2R1bGUgfSBmcm9tICduZ3gtbWFya2Rvd24nO1xuaW1wb3J0IHsgQXBwSGVscE1vZGFsIH0gZnJvbSAnLi9oZWxwL2hlbHAubW9kYWwnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFRyYW5zbGF0ZUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90cmFuc2xhdGUtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFN0ZXBwZXJJbnRsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XG5pbXBvcnQgeyBNYXRTdGVwcGVySTE4biB9IGZyb20gJy4vbWF0ZXJpYWwvc3RlcHBlci9tYXRlcmlhbC5zdGVwcGVyLWkxOG4nO1xuaW1wb3J0IHsgVXBsb2FkRmlsZUNvbXBvbmVudCB9IGZyb20gJy4vdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUuY29tcG9uZW50JztcbmltcG9ydCB7IFVwbG9hZEZpbGVQb3BvdmVyIH0gZnJvbSAnLi91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaGFyZWRUZXN0c1BhZ2UgfSBmcm9tICcuL3Rlc3RpbmcvdGVzdHMucGFnZSc7XG5pbXBvcnQgeyBBUFBfU1RPUkFHRSB9IGZyb20gJy4vc2VydmljZXMvc3RvcmFnZS9zdG9yYWdlLnV0aWxzJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zdG9yYWdlL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZWRUb29sYmFyTW9kdWxlIH0gZnJvbSAnLi90b29sYmFyL3Rvb2xiYXIubW9kdWxlJztcbmltcG9ydCB7IE5neEpkZW50aWNvbk1vZHVsZSB9IGZyb20gJ25neC1qZGVudGljb24nO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxGYWN0b3J5KG92ZXJsYXk6IE92ZXJsYXkpOiAoKSA9PiBDbG9zZVNjcm9sbFN0cmF0ZWd5IHtcbiAgcmV0dXJuICgpID0+IG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5jbG9zZSgpO1xufVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElvbmljTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIENvbG9yUGlja2VyTW9kdWxlLFxuICAgIFRleHRNYXNrTW9kdWxlLFxuICAgIERyYWdEcm9wTW9kdWxlLFxuICAgIE1hcmtkb3duTW9kdWxlLFxuXG4gICAgLy8gU3ViIG1vZHVsZXNcbiAgICBTaGFyZWRNYXRlcmlhbE1vZHVsZSxcbiAgICBTaGFyZWREaXJlY3RpdmVzTW9kdWxlLFxuICAgIFNoYXJlZFBpcGVzTW9kdWxlLFxuICAgIFNoYXJlZEhvdGtleXNNb2R1bGUsXG4gICAgU2hhcmVkVG9vbGJhck1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICAvLyBDb21wb25lbnRzXG4gICAgQXBwRm9ybUZpZWxkLFxuICAgIEFwcExvYWRpbmdTcGlubmVyLFxuICAgIEFwcEhlbHBNb2RhbCxcbiAgICBVcGxvYWRGaWxlQ29tcG9uZW50LFxuICAgIFVwbG9hZEZpbGVQb3BvdmVyLFxuICAgIFNoYXJlZFRlc3RzUGFnZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25pY01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBDb2xvclBpY2tlck1vZHVsZSxcbiAgICBUZXh0TWFza01vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBNYXJrZG93bk1vZHVsZSxcbiAgICBOZ3hKZGVudGljb25Nb2R1bGUsXG5cbiAgICAvLyBTdWItbW9kdWxlc1xuICAgIFNoYXJlZE1hdGVyaWFsTW9kdWxlLFxuICAgIFNoYXJlZERpcmVjdGl2ZXNNb2R1bGUsXG4gICAgU2hhcmVkUGlwZXNNb2R1bGUsXG4gICAgU2hhcmVkSG90a2V5c01vZHVsZSxcbiAgICBTaGFyZWRUb29sYmFyTW9kdWxlLFxuXG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEFwcEZvcm1GaWVsZCxcbiAgICBBcHBMb2FkaW5nU3Bpbm5lcixcbiAgICBBcHBIZWxwTW9kYWwsXG4gICAgVXBsb2FkRmlsZUNvbXBvbmVudCxcbiAgICBVcGxvYWRGaWxlUG9wb3ZlcixcbiAgICBTaGFyZWRUZXN0c1BhZ2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRNb2R1bGUge1xuXG4gIHN0YXRpYyBmb3JSb290KGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8U2hhcmVkTW9kdWxlPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW3NoYXJlZF0gQ3JlYXRpbmcgbW9kdWxlIChyb290KScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBTaGFyZWRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcblxuICAgICAgICB7IHByb3ZpZGU6IEVOVklST05NRU5ULCB1c2VWYWx1ZTogZW52aXJvbm1lbnQgfSxcbiAgICAgICAgLy8geyBwcm92aWRlOiBTdG9yYWdlU2VydmljZSwgdXNlQ2xhc3M6IFN0b3JhZ2VTZXJ2aWNlLCBkZXBzOiBbRU5WSVJPTk1FTlRdfSxcbiAgICAgICAgeyBwcm92aWRlOiBBUFBfU1RPUkFHRSwgdXNlRXhpc3Rpbmc6IFN0b3JhZ2VTZXJ2aWNlfSxcbiAgICAgICAgLy8geyBwcm92aWRlOiBBUFBfUFJPR1JFU1NfQkFSX1NFUlZJQ0UsIHVzZUNsYXNzOiBQcm9ncmVzc0JhclNlcnZpY2UgfSxcblxuICAgICAgICBTdG9yYWdlU2VydmljZSxcbiAgICAgICAgQXVkaW9Qcm92aWRlcixcbiAgICAgICAgRmlsZVNlcnZpY2UsXG4gICAgICAgIFRyYW5zbGF0ZUNvbnRleHRTZXJ2aWNlLFxuICAgICAgICBEYXRlRm9ybWF0U2VydmljZSxcblxuICAgICAgICAvLyBFeHBvcnQgUGlwZXMgYXMgcHJvdmlkZXJzXG4gICAgICAgIERhdGVGcm9tTm93UGlwZSxcbiAgICAgICAgRGF0ZURpZmZEdXJhdGlvblBpcGUsXG4gICAgICAgIExhdExvbmdGb3JtYXRQaXBlLFxuICAgICAgICBMYXRpdHVkZUZvcm1hdFBpcGUsXG4gICAgICAgIExvbmdpdHVkZUZvcm1hdFBpcGUsXG4gICAgICAgIEhpZ2hsaWdodFBpcGUsXG4gICAgICAgIE51bWJlckZvcm1hdFBpcGUsXG5cbiAgICAgICAgeyBwcm92aWRlOiBPdmVybGF5Q29udGFpbmVyLCB1c2VDbGFzczogRnVsbHNjcmVlbk92ZXJsYXlDb250YWluZXIgfSxcbiAgICAgICAgeyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IFByb2dyZXNzSW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlLCBkZXBzOiBbQVBQX1BST0dSRVNTX0JBUl9TRVJWSUNFXSB9LFxuICAgICAgICB7IHByb3ZpZGU6IE1hdFBhZ2luYXRvckludGwsIHVzZUNsYXNzOiBNYXRQYWdpbmF0b3JJMThuLCBkZXBzOiBbVHJhbnNsYXRlU2VydmljZV0gfSxcbiAgICAgICAgeyBwcm92aWRlOiBNYXRTdGVwcGVySW50bCwgdXNlQ2xhc3M6IE1hdFN0ZXBwZXJJMThuLCBkZXBzOiBbVHJhbnNsYXRlU2VydmljZV0gfSxcblxuICAgICAgICAvLyBGSVhNRTogdHJ5IHRvIGZvcmNlIGEgY3VzdG9tIG92ZXJsYXkgZm9yIGF1dG9jb21wbGV0ZSwgYmVjYXVzZSBvZiB0aGVyZSBpcyBhIGJ1ZyB3aGVuIHVzaW5nIGluc2lkZSBhbiBpb25pYyBtb2RhbFxuICAgICAgICAvL3sgcHJvdmlkZTogT3ZlcmxheSwgdXNlQ2xhc3M6IE92ZXJsYXl9LFxuICAgICAgICB7IHByb3ZpZGU6IE1BVF9BVVRPQ09NUExFVEVfU0NST0xMX1NUUkFURUdZLCB1c2VGYWN0b3J5OiBzY3JvbGxGYWN0b3J5LCBkZXBzOiBbT3ZlcmxheV0gfSxcbiAgICAgICAgeyBwcm92aWRlOiBNQVRfQVVUT0NPTVBMRVRFX0RFRkFVTFRfT1BUSU9OUywgdXNlVmFsdWU6IHtcbiAgICAgICAgICAgIGF1dG9BY3RpdmVGaXJzdE9wdGlvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBwcm92aWRlOiBNQVRfU0VMRUNUX1NDUk9MTF9TVFJBVEVHWSwgdXNlRmFjdG9yeTogc2Nyb2xsRmFjdG9yeSwgZGVwczogW092ZXJsYXldIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXX0=