@sumaris-net/ngx-components 18.17.4 → 18.17.6

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.
@@ -78,7 +78,7 @@ export class LocalSettingsService extends StartableService {
78
78
  this._optionDefs = Object.values(options?.options || {});
79
79
  this._serializeAsString = options?.serializeAsString || false;
80
80
  this.resetData();
81
- this._debug = true; // !environment.production;
81
+ this._debug = !environment.production;
82
82
  if (this._debug)
83
83
  console.debug('[settings] Creating service');
84
84
  }
@@ -254,7 +254,7 @@ export class LocalSettingsService extends StartableService {
254
254
  return; // Not found
255
255
  if (typeof feature === 'string') {
256
256
  const lastSyncDate = feature.substring(featurePrefix.length);
257
- console.debug(`[${featureName}] Last synchronization date: ${lastSyncDate}`);
257
+ console.info(`[${featureName}] Last synchronization date: ${lastSyncDate}`);
258
258
  return {
259
259
  name: featureName,
260
260
  lastSyncDate,
@@ -350,6 +350,10 @@ export class LocalSettingsService extends StartableService {
350
350
  // If not inside recursive call: fill page history defaults
351
351
  if (!pageHistory)
352
352
  this.fillPageHistoryDefaults(page, opts);
353
+ // Workaround to fix error in console, because pageHistory is not an array (seems to occur after a peer changed)
354
+ if (!pageHistory && !Array.isArray(this._data.pageHistory)) {
355
+ this._data.pageHistory = [];
356
+ }
353
357
  pageHistory = Array.isArray(pageHistory) ? pageHistory : this._data.pageHistory;
354
358
  const index = pageHistory.findIndex((p) =>
355
359
  // same path
@@ -358,8 +362,8 @@ export class LocalSettingsService extends StartableService {
358
362
  page.path.startsWith(p.path + '/'));
359
363
  // New page: insert it
360
364
  if (index === -1) {
361
- //if (this._debug)
362
- console.debug('[settings] Adding page to history: ', page);
365
+ // DEBUG
366
+ //if (this._debug) console.debug('[settings] Adding page to history: ', page);
363
367
  // Prepend to list
364
368
  pageHistory.splice(0, 0, page);
365
369
  }
@@ -367,8 +371,8 @@ export class LocalSettingsService extends StartableService {
367
371
  const existingPage = pageHistory[index];
368
372
  // Same path: replace existing page
369
373
  if (pageHistory[index].path === page.path) {
370
- //if (this._debug)
371
- console.debug('[settings] Updating existing page in history: ', page);
374
+ // DEBUG
375
+ //if (this._debug) console.debug('[settings] Updating existing page in history: ', page);
372
376
  pageHistory.splice(index, 1);
373
377
  // Copy exiting children
374
378
  page.children = existingPage.children || [];
@@ -390,7 +394,7 @@ export class LocalSettingsService extends StartableService {
390
394
  // If max has been reached, remove old pages
391
395
  if (pageHistory.length > this._data.pageHistoryMaxSize) {
392
396
  const removedPages = pageHistory.splice(this._data.pageHistoryMaxSize, pageHistory.length - this._data.pageHistoryMaxSize);
393
- console.debug('[settings] Pages removed from history: ', removedPages);
397
+ //if (this._debug) console.debug('[settings] Pages removed from history: ', removedPages);
394
398
  }
395
399
  // Apply new value
396
400
  await this.applyProperty('pageHistory', pageHistory);
@@ -403,7 +407,9 @@ export class LocalSettingsService extends StartableService {
403
407
  const index = pageHistory.findIndex((p) => p.path === path);
404
408
  let found = index !== -1;
405
409
  if (found) {
406
- console.debug('[settings] Remove page history: ', path);
410
+ // DEBUG
411
+ if (this._debug)
412
+ console.debug('[settings] Remove page history: ', path);
407
413
  // Remove value
408
414
  pageHistory.splice(index, 1);
409
415
  }
@@ -446,11 +452,13 @@ export class LocalSettingsService extends StartableService {
446
452
  // Execute immediate
447
453
  if (immediate) {
448
454
  if (!this._data) {
449
- console.debug('[settings] Removing local settings from storage');
455
+ // INFO
456
+ console.info('[settings] Removing local settings from storage');
450
457
  return this.storage.remove(SETTINGS_STORAGE_KEY);
451
458
  }
452
459
  else {
453
- console.debug('[settings] Store local settings', this._data);
460
+ // INFO
461
+ console.info('[settings] Store local settings', this._data);
454
462
  if (this._serializeAsString) {
455
463
  // Fix serialization error, in Sumaris-App
456
464
  return this.storage.set(SETTINGS_STORAGE_KEY, JSON.stringify(this._data));
@@ -518,4 +526,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
518
526
  type: Inject,
519
527
  args: [APP_LOCAL_SETTINGS_OPTIONS]
520
528
  }] }] });
521
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUE0QyxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckosT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVGLE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEs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QUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO3dHQWxqQlUsb0JBQW9CLGlHQTREckIsV0FBVyxhQUNDLGtCQUFrQiw2QkFDbEIsMEJBQTBCOzRHQTlEckMsb0JBQW9CLGNBSG5CLE1BQU07OzRGQUdQLG9CQUFvQjtrQkFKaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtvQkFDbEIsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUNwQjs7MEJBNkRJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDckMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBUFBfTE9DQUxFUywgaXNPbkZpZWxkTW9kZSwgTG9jYWxTZXR0aW5ncywgT2ZmbGluZUZlYXR1cmUsIFVzYWdlTW9kZSB9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gJy4vbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5cbmltcG9ydCB7IGVxdWFscywgZ2V0UHJvcGVydHlCeVBhdGgsIGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdW5kZWZpbmVkSWZOdWxsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMYXRMb25nUGF0dGVybiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc0NhcGFjaXRvciwgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcbmltcG9ydCB7IEFwcFByb3BlcnRpZXNVdGlscyB9IGZyb20gJy4uL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLnV0aWxzJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvdXJsLnV0aWxzJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1NUT1JBR0VfS0VZID0gJ3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUyA9IFsnbW9iaWxlJywgJ3RvdWNoVWknIC8qZGVwcmVjYXRlZCovXTtcblxuLy8gZml4bWU6IHRoaXMgY29uc3RhbnQgcG9pbnRzIHRvIHN0YXRpYyBlbnZpcm9ubWVudFxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogTG9jYWxTZXR0aW5ncyA9IHtcbiAgYWNjb3VudEluaGVyaXRhbmNlOiB0cnVlLFxuICBsb2NhbGU6IGVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUsXG4gIGxhdExvbmdGb3JtYXQ6IGVudmlyb25tZW50LmRlZmF1bHRMYXRMb25nRm9ybWF0IHx8ICdERE1NJyxcbiAgcGFnZUhpc3RvcnlNYXhTaXplOiAzLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFNldHRpbmdzT3B0aW9ucyB7XG4gIHNlcmlhbGl6ZUFzU3RyaW5nPzogYm9vbGVhbjsgLy8gZmFsc2UgYnkgZGVmYXVsdFxuICBvcHRpb25zOiBGb3JtRmllbGREZWZpbml0aW9uTWFwO1xufVxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIHBhdGggaW4gYSBnaXZlbiBVUkwgb3IgcmVzb3VyY2UuXG4gICAqXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCAoZGVmYXVsdCksIGFueSBxdWVyeSBwYXJhbWV0ZXJzIGFwcGVuZGVkIHRvIHRoZSBwYXRoXG4gICAqIHdpbGwgYmUgc3RyaXBwZWQgb3IgaWdub3JlZCBkdXJpbmcgcHJvY2Vzc2luZy5cbiAgICogV2hlbiBzZXQgdG8gYGZhbHNlYCBvciB1bmRlZmluZWQsIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gdGhlIHBhdGhcbiAgICogd2lsbCByZW1haW4gaW50YWN0IGFuZCBiZSBjb25zaWRlcmVkLlxuICAgKlxuICAgKiBDb21tb25seSB1c2VkIGluIHNjZW5hcmlvcyB3aGVyZSBVUkwgbm9ybWFsaXphdGlvbiBvciBzaW1wbGlmaWNhdGlvbiBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlbW92ZVBhdGhRdWVyeVBhcmFtcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0byByZW1vdmUgdGhlIDxzbWFsbD4gSFRNTCB0YWdcbiAgICogZnJvbSB0aGUgdGl0bGUuIFdoZW4gc2V0IHRvIHRydWUsIGFueSA8c21hbGw+IHRhZ3Mgd2l0aGluIHRoZSB0aXRsZVxuICAgKiB3aWxsIGJlIHN0cmlwcGVkIG9yIGlnbm9yZWQuIERlZmF1bHRzIHRvIHVuZGVmaW5lZCBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgYW4gZXZlbnQgc2hvdWxkIGJlIGVtaXR0ZWQgb3Igbm90LlxuICAgKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSByZWxldmFudCBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICogV2hlbiBzZXQgdG8gYGZhbHNlYCBvciBvbWl0dGVkLCBubyBldmVudCB3aWxsIGJlIGVtaXR0ZWQuXG4gICAqXG4gICAqIFR5cGljYWxseSB1c2VkIHRvIGNvbnRyb2wgdGhlIHByb3BhZ2F0aW9uIG9mIGNoYW5nZXMgb3IgYWN0aW9uc1xuICAgKiB0byBldmVudCBsaXN0ZW5lcnMgd2l0aGluIGEgc3lzdGVtIG9yIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQYXJ0aWFsPExvY2FsU2V0dGluZ3M+PignRGVmYXVsdExvY2FsU2V0dGluZ3MnKTtcbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbFNldHRpbmdzT3B0aW9ucz4oJ0xvY2FsU2V0dGluZ3NPcHRpb25zJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBkZXBzOiBbQVBQX0xPQ0FMRVNdLFxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFNldHRpbmdzU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8TG9jYWxTZXR0aW5ncz4ge1xuICBvbkNoYW5nZSA9IG5ldyBTdWJqZWN0PExvY2FsU2V0dGluZ3M+KCk7XG4gIGRhcmtNb2RlJCA9IG1lcmdlKHRoaXMub25DaGFuZ2UsIHRoaXMuc3RhcnRTdWJqZWN0KS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKChkYXRhKSA9PiBkYXRhPy5kYXJrTW9kZSB8fCBmYWxzZSlcbiAgKTtcbiAgbG9jYWxlJCA9IG1lcmdlKHRoaXMub25DaGFuZ2UsIHRoaXMuc3RhcnRTdWJqZWN0KS5waXBlKFxuICAgIHN0YXJ0V2l0aCh0aGlzLnNldHRpbmdzKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIG1hcCgoZGF0YSkgPT4gZGF0YT8ubG9jYWxlIHx8IHRoaXMuZW52aXJvbm1lbnQ/LmRlZmF1bHRMb2NhbGUpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uRGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXJpYWxpemVBc1N0cmluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfJHBlcnNpc3Q6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGdldCBzZXR0aW5ncygpOiBMb2NhbFNldHRpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sb2NhbGUpIHx8IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xuICB9XG5cbiAgZ2V0IGxhdExvbmdGb3JtYXQoKTogTGF0TG9uZ1BhdHRlcm4ge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxhdExvbmdGb3JtYXQpIHx8ICdERE1NJztcbiAgfVxuXG4gIGdldCB1c2FnZU1vZGUoKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fZGF0YS51c2FnZU1vZGUpID8gdGhpcy5fZGF0YS51c2FnZU1vZGUgOiBpc0NhcGFjaXRvcih3aW5kb3cpIHx8IGlzTW9iaWxlKHdpbmRvdykgPyAnRklFTEQnIDogJ0RFU0snO1xuICB9XG5cbiAgc2V0IHVzYWdlTW9kZSh2YWx1ZTogVXNhZ2VNb2RlKSB7XG4gICAgdGhpcy5hcHBseVByb3BlcnR5KCd1c2FnZU1vZGUnLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgbW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9kYXRhLm1vYmlsZSkgPyB0aGlzLl9kYXRhLm1vYmlsZSA6IGlzTW9iaWxlKHdpbmRvdyk7XG4gIH1cblxuICBzZXQgbW9iaWxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBwYWdlSGlzdG9yeSgpOiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdIHtcbiAgICByZXR1cm4gKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSkgfHwgW107XG4gIH1cblxuICBnZXQgYWxsb3dEYXJrTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudD8uYWxsb3dEYXJrTW9kZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc0RhcmtNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93RGFya01vZGUgJiYgdGhpcy5fZGF0YT8uZGFya01vZGUgPT09IHRydWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1MpIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNldHRpbmdzOiBMb2NhbFNldHRpbmdzLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlMpIG9wdGlvbnM6IExvY2FsU2V0dGluZ3NPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLmRlZmF1bHRTZXR0aW5ncyA9IHsgLi4uREVGQVVMVF9TRVRUSU5HUywgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3MgfTtcblxuICAgIHRoaXMuX29wdGlvbkRlZnMgPSBPYmplY3QudmFsdWVzKG9wdGlvbnM/Lm9wdGlvbnMgfHwge30pO1xuICAgIHRoaXMuX3NlcmlhbGl6ZUFzU3RyaW5nID0gb3B0aW9ucz8uc2VyaWFsaXplQXNTdHJpbmcgfHwgZmFsc2U7XG5cbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgdGhpcy5fZGVidWcgPSB0cnVlOyAvLyAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gQ3JlYXRpbmcgc2VydmljZScpO1xuICB9XG5cbiAgbmdPblN0YXJ0KCk6IFByb21pc2U8TG9jYWxTZXR0aW5ncz4ge1xuICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBTdGFydGluZyBzZXJ2aWNlLi4uJyk7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlXG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB0aGlzLm1vYmlsZTtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHRoaXMudXNhZ2VNb2RlO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcmV0dXJuIHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgfVxuXG4gIGlzVXNhZ2VNb2RlKG1vZGU6IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVzYWdlTW9kZSA9PT0gbW9kZTtcbiAgfVxuXG4gIGlzT25GaWVsZE1vZGUodmFsdWU/OiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNPbkZpZWxkTW9kZSh2YWx1ZSB8fCB0aGlzLnVzYWdlTW9kZSk7XG4gIH1cblxuICBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3MgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuX2RhdGEgfHwgPExvY2FsU2V0dGluZ3M+e307XG5cbiAgICAvLyBSZXN0b3JlIGZyb20gc3RvcmFnZVxuICAgIGNvbnN0IHNldHRpbmdzID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChTRVRUSU5HU19TVE9SQUdFX0tFWSk7XG5cbiAgICAvLyBSZXN0b3JlIGxvY2FsIHNldHRpbmdzIChvciBrZWVwIG9sZCBzZXR0aW5ncylcbiAgICBpZiAoaXNOb3ROaWwoc2V0dGluZ3MpKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gUmVzdG9yaW5nIHByZXZpb3VzIHNldHRpbmdzLi4uJyk7XG5cbiAgICAgIGNvbnN0IHJlc3RvcmVkRGF0YSA9IHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNldHRpbmdzKSA6IHNldHRpbmdzO1xuXG4gICAgICAvLyBBdm9pZCB0byBvdmVycmlkZSB0cmFuc2llbnQgcHJvcGVydGllc1xuICAgICAgU0VUVElOR1NfVFJBTlNJRU5UX1BST1BFUlRJRVMuZm9yRWFjaCgodHJhbnNpZW50S2V5KSA9PiB7XG4gICAgICAgIGRlbGV0ZSByZXN0b3JlZERhdGFbdHJhbnNpZW50S2V5XTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBNZXJnZSBpbnRvIGV4aXN0aW5nIGRhdGFcbiAgICAgIGRhdGEgPSBPYmplY3QuYXNzaWduKGRhdGEsIHJlc3RvcmVkRGF0YSk7XG5cbiAgICAgIC8vIEZpeCBrbm93biBhdHRyaWJ1dGVcbiAgICAgIGlmIChkYXRhLnBhZ2VIaXN0b3J5ICYmICFBcnJheS5pc0FycmF5KGRhdGEucGFnZUhpc3RvcnkpKSBkYXRhLnBhZ2VIaXN0b3J5ID0gW107XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBkYXJrTW9kZSwgaWYgbm90IHNldFxuICAgIGlmICh0aGlzLmVudmlyb25tZW50Py5hbGxvd0RhcmtNb2RlICE9PSB0cnVlKSB7XG4gICAgICBkZWxldGUgZGF0YS5kYXJrTW9kZTtcbiAgICAgIGRlbGV0ZSBkYXRhLmF1dG9EYXJrTW9kZTtcbiAgICB9IGVsc2UgaWYgKGlzTmlsKGRhdGEuZGFya01vZGUpIHx8IGRhdGEuYXV0b0RhcmtNb2RlICE9PSBmYWxzZSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIEF1dG8tZGV0ZWN0IHN5c3RlbSBkYXJrIG1vZGUuLi4nKTtcbiAgICAgIGRhdGEuZGFya01vZGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7XG4gICAgICBkYXRhLmF1dG9EYXJrTW9kZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMub25DaGFuZ2UubmV4dChkYXRhKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0UHJvcGVydHk8VCA9IHN0cmluZz4oa2V5T3JEZWY6IHN0cmluZyB8IEZvcm1GaWVsZERlZmluaXRpb24sIHZhbHVlOiBULCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBpbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIWtleU9yRGVmKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3NldHRpbmdzXSBTZXR0aW5nIHByb3BlcnR5ICR7a2V5T3JEZWZ9IHRvOmAsIHZhbHVlKTtcblxuICAgIHRoaXMuX2RhdGEucHJvcGVydGllcyA9IHRoaXMuX2RhdGEucHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdID0gaXNOaWwodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWUudG9TdHJpbmcoKTtcblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkob3B0cz8uaW1tZWRpYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcm9wZXJ0eShrZXlPckRlZjogc3RyaW5nIHwgRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCBpc05vdE5pbChkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlIDoga2V5T3JEZWYuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZElmTnVsbChkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0Jvb2xlYW4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyB2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNJbnQoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gcGFyc2VJbnQodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc051bWJlcnMoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcChwYXJzZUZsb2F0KSB8fCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IFtwYXJzZUZsb2F0KHZhbHVlKV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzU3RyaW5ncyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlLnNwbGl0KCcsJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNPYmplY3RzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGFueVtdKTogYW55W10ge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICAvLyBQYXJzZSBhcnJheVxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgYXN5bmMgYXBwbHkoc2V0dGluZ3M6IFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuOyBzYW5pdGl6ZT86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICAvLyBTYW5pdGl6ZSAoa2VlcCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHNldCBieSB1c2VyXG4gICAgaWYgKG9wdHM/LnNhbml0aXplKSB7XG4gICAgICBzZXR0aW5ncy5wcm9wZXJ0aWVzID0gQXBwUHJvcGVydGllc1V0aWxzLnNhbml0aXplKHNldHRpbmdzLnByb3BlcnRpZXMsIHsgZGVmaW5pdGlvbnM6IHRoaXMub3B0aW9uRGVmcyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgLi4udGhpcy5fZGF0YSxcbiAgICAgIC4uLnNldHRpbmdzLFxuICAgIH07XG5cbiAgICBpZiAoZXF1YWxzKGRhdGEsIHRoaXMuX2RhdGEpKSByZXR1cm47IC8vIFNraXAgaWYgbm8gY2hhbmdlc1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gQXBwbHlpbmcgbG9jYWwgc2V0dGluZ3MuLi4nLCBzZXR0aW5ncyk7XG5cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgIC8vIFNhdmUgbG9jYWxseVxuICAgIGlmIChvcHRzICYmIG9wdHMucGVyc2lzdEltbWVkaWF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpOyAvLyBObyBBV0FJVFxuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXBwbHlQcm9wZXJ0eShrZXk6IGtleW9mIExvY2FsU2V0dGluZ3MsIHZhbHVlOiBhbnksIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBjaGFuZ2VzID0ge307XG4gICAgY2hhbmdlc1trZXldID0gdmFsdWU7XG4gICAgYXdhaXQgdGhpcy5hcHBseShjaGFuZ2VzLCBvcHRzKTtcbiAgfVxuXG4gIGdldFBhZ2VTZXR0aW5nczxUID0gYW55PihwYWdlSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lPzogc3RyaW5nKTogVCB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnBhZ2VzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgodGhpcy5fZGF0YS5wYWdlcywga2V5ICsgJy4nICsgcHJvcGVydHlOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEucGFnZXNba2V5XTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVQYWdlU2V0dGluZyhwYWdlSWQ6IHN0cmluZywgdmFsdWU6IGFueSwgcHJvcGVydHlOYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5wYWdlcyA9IHRoaXMuX2RhdGEucGFnZXMgfHwge307XG5cbiAgICBjb25zdCBrZXkgPSBwYWdlSWQucmVwbGFjZSgvWy9dL2csICdfXycpO1xuICAgIGlmIChwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHRoaXMuX2RhdGEucGFnZXNba2V5XSB8fCB7fTtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG4gIGdldE9mZmxpbmVGZWF0dXJlPEYgPSBhbnk+KGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBPZmZsaW5lRmVhdHVyZTxGPiB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBpc0VtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICghZmVhdHVyZU5hbWUpIHRocm93IEVycm9yKFwiTWlzc2luZyAnZmVhdHVyZU5hbWUnIGFyZ3VtZW50XCIpO1xuXG4gICAgZmVhdHVyZU5hbWUgPSBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlTmFtZSArICcjJztcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZCgoZikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZU5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKCFmZWF0dXJlKSByZXR1cm47IC8vIE5vdCBmb3VuZFxuICAgIGlmICh0eXBlb2YgZmVhdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxhc3RTeW5jRGF0ZSA9IGZlYXR1cmUuc3Vic3RyaW5nKGZlYXR1cmVQcmVmaXgubGVuZ3RoKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFske2ZlYXR1cmVOYW1lfV0gTGFzdCBzeW5jaHJvbml6YXRpb24gZGF0ZTogJHtsYXN0U3luY0RhdGV9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmZWF0dXJlTmFtZSxcbiAgICAgICAgbGFzdFN5bmNEYXRlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmU7XG4gIH1cblxuICBnZXRPZmZsaW5lRmVhdHVyZUxhc3RTeW5jRGF0ZShmZWF0dXJlTmFtZTogc3RyaW5nKTogTW9tZW50IHtcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG4gICAgcmV0dXJuIGZlYXR1cmUgJiYgZnJvbURhdGVJU09TdHJpbmcoZmVhdHVyZS5sYXN0U3luY0RhdGUpO1xuICB9XG5cbiAgaGFzT2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZmVhdHVyZU5hbWUpIHJldHVybiBpc05vdE5pbCh0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgaXNOb3RFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKTtcbiAgfVxuXG4gIHNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlOiBPZmZsaW5lRmVhdHVyZSkge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgW107XG5cbiAgICBmZWF0dXJlLm5hbWUgPSBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlLm5hbWUgKyAnIyc7XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmRJbmRleCgoZikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZS5uYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXNbZXhpc3RpbmdJbmRleF0gPSBmZWF0dXJlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG4gIG1hcmtPZmZsaW5lRmVhdHVyZUFzU3luYyhmZWF0dXJlTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcblxuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgZmVhdHVyZSA9IDxPZmZsaW5lRmVhdHVyZT57XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxhc3RTeW5jRGF0ZTogRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBmZWF0dXJlLmxhc3RTeW5jRGF0ZSA9IERhdGVVdGlscy5tb21lbnQoKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmUpO1xuICB9XG5cbiAgcmVtb3ZlT2ZmbGluZUZlYXR1cmVzKCkge1xuICAgIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyA9IFtdO1xuXG4gICAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGZpZWxkTmFtZTogc3RyaW5nLCBkZWZhdWx0QXR0cmlidXRlcz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2BzdW1hcmlzLmZpZWxkLiR7ZmllbGROYW1lfS5hdHRyaWJ1dGVzYF07XG4gICAgLy8gTm90aGluZyBmb3VuZCBpbiBzZXR0aW5nczogcmV0dXJuIGRlZmF1bHRzXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVzIHx8IFsnbGFiZWwnLCAnbmFtZSddO1xuXG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJyk7XG4gIH1cblxuICBnZXRQYWdlRmllbGREZWZhdWx0VmFsdWUocGFnZUlkOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlU2V0dGluZ3MocGFnZUlkLCBgZmllbGQuJHtmaWVsZE5hbWV9LmRlZmF1bHRWYWx1ZWApO1xuICB9XG5cbiAgZ2V0IG9wdGlvbkRlZnMoKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRGVmcztcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9uKGRlZjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgb3B0cz86IHsgcmVwbGFjZUlmRXhpc3RzPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vcHRpb25EZWZzLmZpbmRJbmRleCgoZikgPT4gZi5rZXkgPT09IGRlZi5rZXkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChvcHRzPy5yZXBsYWNlSWZFeGlzdHMgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIHByb3BlcnR5IHske2RlZi5rZXl9fSBhbHJlYWR5IGRlZmluZS5gKTtcbiAgICAgIH1cbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmdcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3NldHRpbmdzXSBVcGRhdGluZyBhZGRpdGlvbmFsIHByb3BlcnR5IHske2RlZi5rZXl9fWAsIGRlZik7XG4gICAgICB0aGlzLl9vcHRpb25EZWZzW2luZGV4XSA9IGRlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbc2V0dGluZ3NdIEFkZGluZyBhZGRpdGlvbmFsIHByb3BlcnR5IHske2RlZi5rZXl9fWAsIGRlZik7XG4gICAgICB0aGlzLl9vcHRpb25EZWZzLnB1c2goZGVmKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbnMoZGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdKSB7XG4gICAgKGRlZnMgfHwgW10pLmZvckVhY2goKGRlZikgPT4gdGhpcy5yZWdpc3Rlck9wdGlvbihkZWYpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkoXG4gICAgcGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLFxuICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlblxuICApIHtcbiAgICAvLyBJZiBub3QgaW5zaWRlIHJlY3Vyc2l2ZSBjYWxsOiBmaWxsIHBhZ2UgaGlzdG9yeSBkZWZhdWx0c1xuICAgIGlmICghcGFnZUhpc3RvcnkpIHRoaXMuZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZSwgb3B0cyk7XG5cbiAgICBwYWdlSGlzdG9yeSA9IEFycmF5LmlzQXJyYXkocGFnZUhpc3RvcnkpID8gcGFnZUhpc3RvcnkgOiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgoXG4gICAgICAocCkgPT5cbiAgICAgICAgLy8gc2FtZSBwYXRoXG4gICAgICAgIHAucGF0aCA9PT0gcGFnZS5wYXRoIHx8XG4gICAgICAgIC8vIG9yIHN1Yi1wYXRoXG4gICAgICAgIHBhZ2UucGF0aC5zdGFydHNXaXRoKHAucGF0aCArICcvJylcbiAgICApO1xuXG4gICAgLy8gTmV3IHBhZ2U6IGluc2VydCBpdFxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBBZGRpbmcgcGFnZSB0byBoaXN0b3J5OiAnLCBwYWdlKTtcblxuICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoMCwgMCwgcGFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFnZSA9IHBhZ2VIaXN0b3J5W2luZGV4XTtcblxuICAgICAgLy8gU2FtZSBwYXRoOiByZXBsYWNlIGV4aXN0aW5nIHBhZ2VcbiAgICAgIGlmIChwYWdlSGlzdG9yeVtpbmRleF0ucGF0aCA9PT0gcGFnZS5wYXRoKSB7XG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFVwZGF0aW5nIGV4aXN0aW5nIHBhZ2UgaW4gaGlzdG9yeTogJywgcGFnZSk7XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gQ29weSBleGl0aW5nIGNoaWxkcmVuXG4gICAgICAgIHBhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IHNhbWUgcGF0aCAoc2hvdWxkIGJlIGEgcGFyZW50IHBhZ2UpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LCBpZiBub3QgZXhpc3RzXG4gICAgICAgIGV4aXN0aW5nUGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBhcmVudCB0aW1lXG4gICAgICAgIGV4aXN0aW5nUGFnZS50aW1lID0gcGFnZS50aW1lO1xuXG4gICAgICAgIC8vIEFkZCBwYWdlIGFzIHBhcmVudCdzIGNoaWxkcmVuIChyZWN1cnNpdmUgY2FsbClcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIG9wdHMsIGV4aXN0aW5nUGFnZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG4gICAgICAvLyBJZiBtYXggaGFzIGJlZW4gcmVhY2hlZCwgcmVtb3ZlIG9sZCBwYWdlc1xuICAgICAgaWYgKHBhZ2VIaXN0b3J5Lmxlbmd0aCA+IHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYWdlcyA9IHBhZ2VIaXN0b3J5LnNwbGljZSh0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSwgcGFnZUhpc3RvcnkubGVuZ3RoIC0gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUpO1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFBhZ2VzIHJlbW92ZWQgZnJvbSBoaXN0b3J5OiAnLCByZW1vdmVkUGFnZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBuZXcgdmFsdWVcbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCBwYWdlSGlzdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUGFnZUhpc3RvcnkoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0sXG4gICAgcGFnZUhpc3Rvcnk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10gPSB1bmRlZmluZWQsIC8vIHVzZWQgZm9yIHJlY3Vyc2l2ZSBjYWxsIHRvIGNoaWxkcmVuKVxuICAgIGRlcHRoID0gMFxuICApIHtcbiAgICBjb25zdCByb290ID0gZGVwdGggPT09IDA7XG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5Py5zbGljZSgpIC8qY2xvbmUsIHRvIGZvcmNlIGFwcGx5IHRvIHNhdmUgKi8gfHwgW107XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleCgocCkgPT4gcC5wYXRoID09PSBwYXRoKTtcbiAgICBsZXQgZm91bmQgPSBpbmRleCAhPT0gLTE7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFJlbW92ZSBwYWdlIGhpc3Rvcnk6ICcsIHBhdGgpO1xuICAgICAgLy8gUmVtb3ZlIHZhbHVlXG4gICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZWFyY2ggcGF0aCBvbiBjaGlsZHJlbiAoc3RvcCB3aGVuIGZvdW5kKVxuICAgICAgZm91bmQgPVxuICAgICAgICBwYWdlSGlzdG9yeVxuICAgICAgICAgIC5tYXAoKHApID0+IHAuY2hpbGRyZW4pXG4gICAgICAgICAgLmZpbHRlcihpc05vdEVtcHR5QXJyYXkpXG4gICAgICAgICAgLmZpbmRJbmRleCgoY2hpbGRyZW4pID0+IHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCwgb3B0cywgY2hpbGRyZW4sIChkZXB0aCB8fCAwKSArIDEpKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIHJvb3QgbGV2ZWwpXG4gICAgaWYgKGZvdW5kICYmIHJvb3QpIHtcbiAgICAgIC8vIEFwcGx5IGNoYW5nZXNcbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCBwYWdlSGlzdG9yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJQYWdlSGlzdG9yeSgpIHtcbiAgICAvLyBSZXNldCBhbGwgcGFnZSBoaXN0b3J5XG4gICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIFtdLCB7IHBlcnNpc3RJbW1lZGlhdGU6IHRydWUgfSk7XG4gIH1cblxuICAvKiAtLSBQcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldERhdGEoKSB7XG4gICAgdGhpcy5fZGF0YSA9IHsgLi4udGhpcy5fZGF0YSwgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3MgfTtcblxuICAgIHRoaXMuX2RhdGEubG9jYWxlID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmc7XG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSA9IFtdO1xuICAgIHRoaXMuX2RhdGEucHJvcGVydGllcyA9IHt9O1xuXG4gICAgY29uc3QgZGVmYXVsdFBlZXIgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyICYmIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKTtcbiAgICB0aGlzLl9kYXRhLnBlZXJVcmwgPSAoZGVmYXVsdFBlZXIgJiYgZGVmYXVsdFBlZXIudXJsKSB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5zdGFydGVkKSB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RMb2NhbGx5KGltbWVkaWF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIEV4ZWN1dGUgaW1tZWRpYXRlXG4gICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgaWYgKCF0aGlzLl9kYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZpbmcgbG9jYWwgc2V0dGluZ3MgZnJvbSBzdG9yYWdlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UucmVtb3ZlKFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gU3RvcmUgbG9jYWwgc2V0dGluZ3MnLCB0aGlzLl9kYXRhKTtcbiAgICAgICAgaWYgKHRoaXMuX3NlcmlhbGl6ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgLy8gRml4IHNlcmlhbGl6YXRpb24gZXJyb3IsIGluIFN1bWFyaXMtQXBwXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldChTRVRUSU5HU19TVE9SQUdFX0tFWSwgdGhpcy5fZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGV2ZW50IGVtaXR0ZXJcbiAgICAgIGlmICghdGhpcy5fJHBlcnNpc3QpIHtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4odHJ1ZSk7XG4gICAgICAgIHRoaXMuXyRwZXJzaXN0XG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwMCksIC8vIGFkZCBhIGRlbGF5IG9mIDJzXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5zdGFydGVkKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucGVyc2lzdExvY2FsbHkodHJ1ZSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl8kcGVyc2lzdC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWxsUGFnZUhpc3RvcnlEZWZhdWx0cyhcbiAgICBwYWdlOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSxcbiAgICBvcHRzPzoge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgICAgIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuICAgIH1cbiAgKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2Uge1xuICAgIGlmICghcGFnZSB8fCAhcGFnZS50aXRsZSB8fCAhcGFnZS5wYXRoKSB0aHJvdyBFcnJvcihcIk1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgJ3BhZ2UnLCAncGFnZS5wYXRoJyBvciAncGFnZS50aXRsZSdcIik7XG5cbiAgICAvLyBTZXQgdGltZVxuICAgIHBhZ2UudGltZSA9IHBhZ2UudGltZSB8fCBEYXRlVXRpbHMubW9tZW50KCk7XG5cbiAgICAvLyBDbGVhbiB0aXRsZVxuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVRpdGxlU21hbGxUYWcgIT09IGZhbHNlKSB7XG4gICAgICAvLyBSZW1vdmUgPHNtYWxsPiBIVE1MIHRhZ3NcbiAgICAgIGNvbnN0IHNtYWxsVGFnSW5kZXggPSBwYWdlLnRpdGxlLmluZGV4T2YoJzwvc21hbGw+Jyk7XG4gICAgICBpZiAoc21hbGxUYWdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcGFnZS50aXRsZSA9IHBhZ2UudGl0bGUuc3Vic3RyaW5nKHNtYWxsVGFnSW5kZXggKyAnPC9zbWFsbD4nLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBwYWdlLnRpdGxlID0gcGFnZS50aXRsZVxuICAgICAgICAvLyBSZW1vdmUgY2xhc3M9XCIuLi5cIiBIVE1MIGF0dHJpYnV0ZVxuICAgICAgICAucmVwbGFjZSgvXFxzKmNsYXNzPVsnXCJdW14nXCJdK1snXCJdJy9nLCAnJylcbiAgICAgICAgLy8gdHJpbVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVQYXRoUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICBwYWdlLnBhdGggPSBVcmxVdGlscy5zdHJpcFF1ZXJ5KHBhZ2UucGF0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cbn1cbiJdfQ==
529
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUE0QyxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckosT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVGLE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEs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QztRQUVELHNCQUFzQjtRQUN0QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBOWpCVSxvQkFBb0IsaUdBNERyQixXQUFXLGFBQ0Msa0JBQWtCLDZCQUNsQiwwQkFBMEI7NEdBOURyQyxvQkFBb0IsY0FIbkIsTUFBTTs7NEZBR1Asb0JBQW9CO2tCQUpoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO29CQUNsQixJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7aUJBQ3BCOzswQkE2REksTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUNyQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFQUF9MT0NBTEVTLCBpc09uRmllbGRNb2RlLCBMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlIH0gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcblxuaW1wb3J0IHsgZXF1YWxzLCBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB1bmRlZmluZWRJZk51bGwgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXAgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExhdExvbmdQYXR0ZXJuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscyc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzLCBmcm9tRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyBIaXN0b3J5UGFnZVJlZmVyZW5jZSB9IGZyb20gJy4vbW9kZWwvaGlzdG9yeS5tb2RlbCc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IGlzQ2FwYWNpdG9yLCBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuaW1wb3J0IHsgQXBwUHJvcGVydGllc1V0aWxzIH0gZnJvbSAnLi4vZm9ybS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMudXRpbHMnO1xuaW1wb3J0IHsgVXJsVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS91cmwudXRpbHMnO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfU1RPUkFHRV9LRVkgPSAnc2V0dGluZ3MnO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1RSQU5TSUVOVF9QUk9QRVJUSUVTID0gWydtb2JpbGUnLCAndG91Y2hVaScgLypkZXByZWNhdGVkKi9dO1xuXG4vLyBmaXhtZTogdGhpcyBjb25zdGFudCBwb2ludHMgdG8gc3RhdGljIGVudmlyb25tZW50XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBMb2NhbFNldHRpbmdzID0ge1xuICBhY2NvdW50SW5oZXJpdGFuY2U6IHRydWUsXG4gIGxvY2FsZTogZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSxcbiAgbGF0TG9uZ0Zvcm1hdDogZW52aXJvbm1lbnQuZGVmYXVsdExhdExvbmdGb3JtYXQgfHwgJ0RETU0nLFxuICBwYWdlSGlzdG9yeU1heFNpemU6IDMsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsU2V0dGluZ3NPcHRpb25zIHtcbiAgc2VyaWFsaXplQXNTdHJpbmc/OiBib29sZWFuOyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gIG9wdGlvbnM6IEZvcm1GaWVsZERlZmluaXRpb25NYXA7XG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMge1xuICAvKipcbiAgICogUmVwcmVzZW50cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgcGF0aCBpbiBhIGdpdmVuIFVSTCBvciByZXNvdXJjZS5cbiAgICpcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSwgYW55IHF1ZXJ5IHBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdGhlIHBhdGhcbiAgICogd2lsbCBiZSBzdHJpcHBlZCBvciBpZ25vcmVkIGR1cmluZyBwcm9jZXNzaW5nLlxuICAgKiBXaGVuIHNldCB0byBgZmFsc2VgIG9yIHVuZGVmaW5lZCwgcXVlcnkgcGFyYW1ldGVycyBpbiB0aGUgcGF0aFxuICAgKiB3aWxsIHJlbWFpbiBpbnRhY3QgYW5kIGJlIGNvbnNpZGVyZWQuXG4gICAqXG4gICAqIENvbW1vbmx5IHVzZWQgaW4gc2NlbmFyaW9zIHdoZXJlIFVSTCBub3JtYWxpemF0aW9uIG9yIHNpbXBsaWZpY2F0aW9uIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSB0aGUgPHNtYWxsPiBIVE1MIHRhZ1xuICAgKiBmcm9tIHRoZSB0aXRsZS4gV2hlbiBzZXQgdG8gdHJ1ZSwgYW55IDxzbWFsbD4gdGFncyB3aXRoaW4gdGhlIHRpdGxlXG4gICAqIHdpbGwgYmUgc3RyaXBwZWQgb3IgaWdub3JlZC4gRGVmYXVsdHMgdG8gdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciBhbiBldmVudCBzaG91bGQgYmUgZW1pdHRlZCBvciBub3QuXG4gICAqXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIHJlbGV2YW50IGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgKiBXaGVuIHNldCB0byBgZmFsc2VgIG9yIG9taXR0ZWQsIG5vIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC5cbiAgICpcbiAgICogVHlwaWNhbGx5IHVzZWQgdG8gY29udHJvbCB0aGUgcHJvcGFnYXRpb24gb2YgY2hhbmdlcyBvciBhY3Rpb25zXG4gICAqIHRvIGV2ZW50IGxpc3RlbmVycyB3aXRoaW4gYSBzeXN0ZW0gb3IgYXBwbGljYXRpb24uXG4gICAqL1xuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NFVFRJTkdTID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4+KCdEZWZhdWx0TG9jYWxTZXR0aW5ncycpO1xuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPExvY2FsU2V0dGluZ3NPcHRpb25zPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGRlcHM6IFtBUFBfTE9DQUxFU10sXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsU2V0dGluZ3NTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTxMb2NhbFNldHRpbmdzPiB7XG4gIG9uQ2hhbmdlID0gbmV3IFN1YmplY3Q8TG9jYWxTZXR0aW5ncz4oKTtcbiAgZGFya01vZGUkID0gbWVyZ2UodGhpcy5vbkNoYW5nZSwgdGhpcy5zdGFydFN1YmplY3QpLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBtYXAoKGRhdGEpID0+IGRhdGE/LmRhcmtNb2RlIHx8IGZhbHNlKVxuICApO1xuICBsb2NhbGUkID0gbWVyZ2UodGhpcy5vbkNoYW5nZSwgdGhpcy5zdGFydFN1YmplY3QpLnBpcGUoXG4gICAgc3RhcnRXaXRoKHRoaXMuc2V0dGluZ3MpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKChkYXRhKSA9PiBkYXRhPy5sb2NhbGUgfHwgdGhpcy5lbnZpcm9ubWVudD8uZGVmYXVsdExvY2FsZSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25EZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlcmlhbGl6ZUFzU3RyaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF8kcGVyc2lzdDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgZ2V0IHNldHRpbmdzKCk6IExvY2FsU2V0dGluZ3Mge1xuICAgIHJldHVybiB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxvY2FsZSkgfHwgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmc7XG4gIH1cblxuICBnZXQgbGF0TG9uZ0Zvcm1hdCgpOiBMYXRMb25nUGF0dGVybiB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGF0TG9uZ0Zvcm1hdCkgfHwgJ0RETU0nO1xuICB9XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9kYXRhLnVzYWdlTW9kZSkgPyB0aGlzLl9kYXRhLnVzYWdlTW9kZSA6IGlzQ2FwYWNpdG9yKHdpbmRvdykgfHwgaXNNb2JpbGUod2luZG93KSA/ICdGSUVMRCcgOiAnREVTSyc7XG4gIH1cblxuICBzZXQgdXNhZ2VNb2RlKHZhbHVlOiBVc2FnZU1vZGUpIHtcbiAgICB0aGlzLmFwcGx5UHJvcGVydHkoJ3VzYWdlTW9kZScsIHZhbHVlKTtcbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEubW9iaWxlKSA/IHRoaXMuX2RhdGEubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIHNldCBtb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2VIaXN0b3J5KCk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10ge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB8fCBbXTtcbiAgfVxuXG4gIGdldCBhbGxvd0RhcmtNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50Py5hbGxvd0RhcmtNb2RlID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzRGFya01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dEYXJrTW9kZSAmJiB0aGlzLl9kYXRhPy5kYXJrTW9kZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0NBTF9TRVRUSU5HUykgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2V0dGluZ3M6IExvY2FsU2V0dGluZ3MsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUykgb3B0aW9uczogTG9jYWxTZXR0aW5nc09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0geyAuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5ncyB9O1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMob3B0aW9ucz8ub3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5fc2VyaWFsaXplQXNTdHJpbmcgPSBvcHRpb25zPy5zZXJpYWxpemVBc1N0cmluZyB8fCBmYWxzZTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuICBuZ09uU3RhcnQoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzPiB7XG4gICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFN0YXJ0aW5nIHNlcnZpY2UuLi4nKTtcblxuICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHRoaXMubW9iaWxlO1xuICAgIHRoaXMuX2RhdGEudXNhZ2VNb2RlID0gdGhpcy51c2FnZU1vZGU7XG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICByZXR1cm4gdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuICB9XG5cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNhZ2VNb2RlID09PSBtb2RlO1xuICB9XG5cbiAgaXNPbkZpZWxkTW9kZSh2YWx1ZT86IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc09uRmllbGRNb2RlKHZhbHVlIHx8IHRoaXMudXNhZ2VNb2RlKTtcbiAgfVxuXG4gIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8TG9jYWxTZXR0aW5ncyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkYXRhID0gdGhpcy5fZGF0YSB8fCA8TG9jYWxTZXR0aW5ncz57fTtcblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcblxuICAgIC8vIFJlc3RvcmUgbG9jYWwgc2V0dGluZ3MgKG9yIGtlZXAgb2xkIHNldHRpbmdzKVxuICAgIGlmIChpc05vdE5pbChzZXR0aW5ncykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gdHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG5cbiAgICAgIC8vIEF2b2lkIHRvIG92ZXJyaWRlIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAgICBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUy5mb3JFYWNoKCh0cmFuc2llbnRLZXkpID0+IHtcbiAgICAgICAgZGVsZXRlIHJlc3RvcmVkRGF0YVt0cmFuc2llbnRLZXldO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lcmdlIGludG8gZXhpc3RpbmcgZGF0YVxuICAgICAgZGF0YSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgcmVzdG9yZWREYXRhKTtcblxuICAgICAgLy8gRml4IGtub3duIGF0dHJpYnV0ZVxuICAgICAgaWYgKGRhdGEucGFnZUhpc3RvcnkgJiYgIUFycmF5LmlzQXJyYXkoZGF0YS5wYWdlSGlzdG9yeSkpIGRhdGEucGFnZUhpc3RvcnkgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIGRhcmtNb2RlLCBpZiBub3Qgc2V0XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LmFsbG93RGFya01vZGUgIT09IHRydWUpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmRhcmtNb2RlO1xuICAgICAgZGVsZXRlIGRhdGEuYXV0b0RhcmtNb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwoZGF0YS5kYXJrTW9kZSkgfHwgZGF0YS5hdXRvRGFya01vZGUgIT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gQXV0by1kZXRlY3Qgc3lzdGVtIGRhcmsgbW9kZS4uLicpO1xuICAgICAgZGF0YS5kYXJrTW9kZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJykubWF0Y2hlcztcbiAgICAgIGRhdGEuYXV0b0RhcmtNb2RlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KGRhdGEpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzZXRQcm9wZXJ0eTxUID0gc3RyaW5nPihrZXlPckRlZjogc3RyaW5nIHwgRm9ybUZpZWxkRGVmaW5pdGlvbiwgdmFsdWU6IFQsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IGltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAha2V5T3JEZWYpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eShrZXlPckRlZi5rZXksIHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbc2V0dGluZ3NdIFNldHRpbmcgcHJvcGVydHkgJHtrZXlPckRlZn0gdG86YCwgdmFsdWUpO1xuXG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzID0gdGhpcy5fZGF0YS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRoaXMuX2RhdGEucHJvcGVydGllc1trZXlPckRlZl0gPSBpc05pbCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseShvcHRzPy5pbW1lZGlhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb3BlcnR5KGtleU9yRGVmOiBzdHJpbmcgfCBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXBlb2Yga2V5T3JEZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShrZXlPckRlZi5rZXksIGlzTm90TmlsKGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiBrZXlPckRlZi5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmIHRoaXMuX2RhdGEucHJvcGVydGllc1trZXlPckRlZl07XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkSWZOdWxsKGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzQm9vbGVhbihkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHZhbHVlICYmIHZhbHVlICE9PSAnZmFsc2UnIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0ludChkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBwYXJzZUludCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzTnVtYmVycyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gW3BhcnNlRmxvYXQodmFsdWUpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNTdHJpbmdzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUuc3BsaXQoJywnKSkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc09iamVjdHMoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIC8vIFBhcnNlIGFycmF5XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBhc3luYyBhcHBseShzZXR0aW5nczogUGFydGlhbDxMb2NhbFNldHRpbmdzPiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW47IHNhbml0aXplPzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIC8vIFNhbml0aXplIChrZWVwIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgc2V0IGJ5IHVzZXJcbiAgICBpZiAob3B0cz8uc2FuaXRpemUpIHtcbiAgICAgIHNldHRpbmdzLnByb3BlcnRpZXMgPSBBcHBQcm9wZXJ0aWVzVXRpbHMuc2FuaXRpemUoc2V0dGluZ3MucHJvcGVydGllcywgeyBkZWZpbml0aW9uczogdGhpcy5vcHRpb25EZWZzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAuLi50aGlzLl9kYXRhLFxuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgfTtcblxuICAgIGlmIChlcXVhbHMoZGF0YSwgdGhpcy5fZGF0YSkpIHJldHVybjsgLy8gU2tpcCBpZiBubyBjaGFuZ2VzXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBBcHBseWluZyBsb2NhbCBzZXR0aW5ncy4uLicsIHNldHRpbmdzKTtcblxuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgLy8gU2F2ZSBsb2NhbGx5XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wZXJzaXN0SW1tZWRpYXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3RMb2NhbGx5KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7IC8vIE5vIEFXQUlUXG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhcHBseVByb3BlcnR5KGtleToga2V5b2YgTG9jYWxTZXR0aW5ncywgdmFsdWU6IGFueSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB7fTtcbiAgICBjaGFuZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICBhd2FpdCB0aGlzLmFwcGx5KGNoYW5nZXMsIG9wdHMpO1xuICB9XG5cbiAgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHBhZ2VJZDogc3RyaW5nLCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucGFnZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aCh0aGlzLl9kYXRhLnBhZ2VzLCBrZXkgKyAnLicgKyBwcm9wZXJ0eU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0YS5wYWdlc1trZXldO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5nKHBhZ2VJZDogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLnBhZ2VzID0gdGhpcy5fZGF0YS5wYWdlcyB8fCB7fTtcblxuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKHByb3BlcnR5TmFtZSkge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdGhpcy5fZGF0YS5wYWdlc1trZXldIHx8IHt9O1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICB9XG5cbiAgZ2V0T2ZmbGluZUZlYXR1cmU8RiA9IGFueT4oZmVhdHVyZU5hbWU6IHN0cmluZyk6IE9mZmxpbmVGZWF0dXJlPEY+IHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzIHx8IGlzRW1wdHlBcnJheSh0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKCFmZWF0dXJlTmFtZSkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nICdmZWF0dXJlTmFtZScgYXJndW1lbnRcIik7XG5cbiAgICBmZWF0dXJlTmFtZSA9IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmVOYW1lICsgJyMnO1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5maW5kKChmKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGYgPT09ICdzdHJpbmcnKSByZXR1cm4gZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoZmVhdHVyZVByZWZpeCk7XG4gICAgICBpZiAoZiAmJiB0eXBlb2YgZiA9PT0gJ29iamVjdCcgJiYgZi5uYW1lKSByZXR1cm4gZi5uYW1lID09PSBmZWF0dXJlTmFtZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpZiAoIWZlYXR1cmUpIHJldHVybjsgLy8gTm90IGZvdW5kXG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbGFzdFN5bmNEYXRlID0gZmVhdHVyZS5zdWJzdHJpbmcoZmVhdHVyZVByZWZpeC5sZW5ndGgpO1xuICAgICAgY29uc29sZS5pbmZvKGBbJHtmZWF0dXJlTmFtZX1dIExhc3Qgc3luY2hyb25pemF0aW9uIGRhdGU6ICR7bGFzdFN5bmNEYXRlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUsXG4gICAgICAgIGxhc3RTeW5jRGF0ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlO1xuICB9XG5cbiAgZ2V0T2ZmbGluZUZlYXR1cmVMYXN0U3luY0RhdGUoZmVhdHVyZU5hbWU6IHN0cmluZyk6IE1vbWVudCB7XG4gICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpO1xuICAgIHJldHVybiBmZWF0dXJlICYmIGZyb21EYXRlSVNPU3RyaW5nKGZlYXR1cmUubGFzdFN5bmNEYXRlKTtcbiAgfVxuXG4gIGhhc09mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGZlYXR1cmVOYW1lKSByZXR1cm4gaXNOb3ROaWwodGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSkpO1xuICAgIHJldHVybiB0aGlzLl9kYXRhICYmIGlzTm90RW1wdHlBcnJheSh0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyk7XG4gIH1cblxuICBzYXZlT2ZmbGluZUZlYXR1cmUoZmVhdHVyZTogT2ZmbGluZUZlYXR1cmUpIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzIHx8IFtdO1xuXG4gICAgZmVhdHVyZS5uYW1lID0gZmVhdHVyZS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBmZWF0dXJlUHJlZml4ID0gZmVhdHVyZS5uYW1lICsgJyMnO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5maW5kSW5kZXgoKGYpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmUubmFtZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzW2V4aXN0aW5nSW5kZXhdID0gZmVhdHVyZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMucHVzaChmZWF0dXJlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gIH1cblxuICBtYXJrT2ZmbGluZUZlYXR1cmVBc1N5bmMoZmVhdHVyZU5hbWU6IHN0cmluZykge1xuICAgIGxldCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG5cbiAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgIGZlYXR1cmUgPSA8T2ZmbGluZUZlYXR1cmU+e1xuICAgICAgICBuYW1lOiBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBsYXN0U3luY0RhdGU6IERhdGVVdGlscy5tb21lbnQoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmVhdHVyZS5sYXN0U3luY0RhdGUgPSBEYXRlVXRpbHMubW9tZW50KCkudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlKTtcbiAgfVxuXG4gIHJlbW92ZU9mZmxpbmVGZWF0dXJlcygpIHtcbiAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSBbXTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmIHRoaXMuX2RhdGEucHJvcGVydGllc1tgc3VtYXJpcy5maWVsZC4ke2ZpZWxkTmFtZX0uYXR0cmlidXRlc2BdO1xuICAgIC8vIE5vdGhpbmcgZm91bmQgaW4gc2V0dGluZ3M6IHJldHVybiBkZWZhdWx0c1xuICAgIGlmICghdmFsdWUpIHJldHVybiBkZWZhdWx0QXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcblxuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpO1xuICB9XG5cbiAgZ2V0UGFnZUZpZWxkRGVmYXVsdFZhbHVlKHBhZ2VJZDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZVNldHRpbmdzKHBhZ2VJZCwgYGZpZWxkLiR7ZmllbGROYW1lfS5kZWZhdWx0VmFsdWVgKTtcbiAgfVxuXG4gIGdldCBvcHRpb25EZWZzKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkRlZnM7XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbihkZWY6IEZvcm1GaWVsZERlZmluaXRpb24sIG9wdHM/OiB7IHJlcGxhY2VJZkV4aXN0cz86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3B0aW9uRGVmcy5maW5kSW5kZXgoKGYpID0+IGYua2V5ID09PSBkZWYua2V5KTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAob3B0cz8ucmVwbGFjZUlmRXhpc3RzICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQWRkaXRpb25hbCBwcm9wZXJ0eSB7JHtkZWYua2V5fX0gYWxyZWFkeSBkZWZpbmUuYCk7XG4gICAgICB9XG4gICAgICAvLyBSZXBsYWNlIGV4aXN0aW5nXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gVXBkYXRpbmcgYWRkaXRpb25hbCBwcm9wZXJ0eSB7JHtkZWYua2V5fX1gLCBkZWYpO1xuICAgICAgdGhpcy5fb3B0aW9uRGVmc1tpbmRleF0gPSBkZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3NldHRpbmdzXSBBZGRpbmcgYWRkaXRpb25hbCBwcm9wZXJ0eSB7JHtkZWYua2V5fX1gLCBkZWYpO1xuICAgICAgdGhpcy5fb3B0aW9uRGVmcy5wdXNoKGRlZik7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb25zKGRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXSkge1xuICAgIChkZWZzIHx8IFtdKS5mb3JFYWNoKChkZWYpID0+IHRoaXMucmVnaXN0ZXJPcHRpb24oZGVmKSk7XG4gIH1cblxuICBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KFxuICAgIHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLFxuICAgIG9wdHM/OiBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucyxcbiAgICBwYWdlSGlzdG9yeT86IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10gLy8gdXNlZCBmb3IgcmVjdXJzaXZlIGNhbGwgdG8gY2hpbGRyZW5cbiAgKSB7XG4gICAgLy8gSWYgbm90IGluc2lkZSByZWN1cnNpdmUgY2FsbDogZmlsbCBwYWdlIGhpc3RvcnkgZGVmYXVsdHNcbiAgICBpZiAoIXBhZ2VIaXN0b3J5KSB0aGlzLmZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2UsIG9wdHMpO1xuXG4gICAgLy8gV29ya2Fyb3VuZCB0byBmaXggZXJyb3IgaW4gY29uc29sZSwgYmVjYXVzZSBwYWdlSGlzdG9yeSBpcyBub3QgYW4gYXJyYXkgKHNlZW1zIHRvIG9jY3VyIGFmdGVyIGEgcGVlciBjaGFuZ2VkKVxuICAgIGlmICghcGFnZUhpc3RvcnkgJiYgIUFycmF5LmlzQXJyYXkodGhpcy5fZGF0YS5wYWdlSGlzdG9yeSkpIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgPSBbXTtcbiAgICB9XG5cbiAgICBwYWdlSGlzdG9yeSA9IEFycmF5LmlzQXJyYXkocGFnZUhpc3RvcnkpID8gcGFnZUhpc3RvcnkgOiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgoXG4gICAgICAocCkgPT5cbiAgICAgICAgLy8gc2FtZSBwYXRoXG4gICAgICAgIHAucGF0aCA9PT0gcGFnZS5wYXRoIHx8XG4gICAgICAgIC8vIG9yIHN1Yi1wYXRoXG4gICAgICAgIHBhZ2UucGF0aC5zdGFydHNXaXRoKHAucGF0aCArICcvJylcbiAgICApO1xuXG4gICAgLy8gTmV3IHBhZ2U6IGluc2VydCBpdFxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBBZGRpbmcgcGFnZSB0byBoaXN0b3J5OiAnLCBwYWdlKTtcblxuICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoMCwgMCwgcGFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFnZSA9IHBhZ2VIaXN0b3J5W2luZGV4XTtcblxuICAgICAgLy8gU2FtZSBwYXRoOiByZXBsYWNlIGV4aXN0aW5nIHBhZ2VcbiAgICAgIGlmIChwYWdlSGlzdG9yeVtpbmRleF0ucGF0aCA9PT0gcGFnZS5wYXRoKSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFVwZGF0aW5nIGV4aXN0aW5nIHBhZ2UgaW4gaGlzdG9yeTogJywgcGFnZSk7XG5cbiAgICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICAvLyBDb3B5IGV4aXRpbmcgY2hpbGRyZW5cbiAgICAgICAgcGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKDAsIDAsIHBhZ2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3Qgc2FtZSBwYXRoIChzaG91bGQgYmUgYSBwYXJlbnQgcGFnZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgcGFyZW50J3MgY2hpbGRyZW4gYXJyYXksIGlmIG5vdCBleGlzdHNcbiAgICAgICAgZXhpc3RpbmdQYWdlLmNoaWxkcmVuID0gZXhpc3RpbmdQYWdlLmNoaWxkcmVuIHx8IFtdO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcGFyZW50IHRpbWVcbiAgICAgICAgZXhpc3RpbmdQYWdlLnRpbWUgPSBwYWdlLnRpbWU7XG5cbiAgICAgICAgLy8gQWRkIHBhZ2UgYXMgcGFyZW50J3MgY2hpbGRyZW4gKHJlY3Vyc2l2ZSBjYWxsKVxuICAgICAgICBhd2FpdCB0aGlzLmFkZFRvUGFnZUhpc3RvcnkocGFnZSwgb3B0cywgZXhpc3RpbmdQYWdlLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTYXZlIGxvY2FsbHkgKG9ubHkgaWYgbm90IGEgcmVjdXJzaXZlIGV4ZWN1dGlvbilcbiAgICBpZiAocGFnZUhpc3RvcnkgPT09IHRoaXMuX2RhdGEucGFnZUhpc3RvcnkpIHtcbiAgICAgIC8vIElmIG1heCBoYXMgYmVlbiByZWFjaGVkLCByZW1vdmUgb2xkIHBhZ2VzXG4gICAgICBpZiAocGFnZUhpc3RvcnkubGVuZ3RoID4gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFBhZ2VzID0gcGFnZUhpc3Rvcnkuc3BsaWNlKHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplLCBwYWdlSGlzdG9yeS5sZW5ndGggLSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSk7XG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFBhZ2VzIHJlbW92ZWQgZnJvbSBoaXN0b3J5OiAnLCByZW1vdmVkUGFnZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBuZXcgdmFsdWVcbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCBwYWdlSGlzdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUGFnZUhpc3RvcnkoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0sXG4gICAgcGFnZUhpc3Rvcnk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10gPSB1bmRlZmluZWQsIC8vIHVzZWQgZm9yIHJlY3Vyc2l2ZSBjYWxsIHRvIGNoaWxkcmVuKVxuICAgIGRlcHRoID0gMFxuICApIHtcbiAgICBjb25zdCByb290ID0gZGVwdGggPT09IDA7XG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5Py5zbGljZSgpIC8qY2xvbmUsIHRvIGZvcmNlIGFwcGx5IHRvIHNhdmUgKi8gfHwgW107XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleCgocCkgPT4gcC5wYXRoID09PSBwYXRoKTtcbiAgICBsZXQgZm91bmQgPSBpbmRleCAhPT0gLTE7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFJlbW92ZSBwYWdlIGhpc3Rvcnk6ICcsIHBhdGgpO1xuXG4gICAgICAvLyBSZW1vdmUgdmFsdWVcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlYXJjaCBwYXRoIG9uIGNoaWxkcmVuIChzdG9wIHdoZW4gZm91bmQpXG4gICAgICBmb3VuZCA9XG4gICAgICAgIHBhZ2VIaXN0b3J5XG4gICAgICAgICAgLm1hcCgocCkgPT4gcC5jaGlsZHJlbilcbiAgICAgICAgICAuZmlsdGVyKGlzTm90RW1wdHlBcnJheSlcbiAgICAgICAgICAuZmluZEluZGV4KChjaGlsZHJlbikgPT4gdGhpcy5yZW1vdmVQYWdlSGlzdG9yeShwYXRoLCBvcHRzLCBjaGlsZHJlbiwgKGRlcHRoIHx8IDApICsgMSkpICE9PSAtMTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIGxvY2FsbHkgKG9ubHkgaWYgcm9vdCBsZXZlbClcbiAgICBpZiAoZm91bmQgJiYgcm9vdCkge1xuICAgICAgLy8gQXBwbHkgY2hhbmdlc1xuICAgICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIHBhZ2VIaXN0b3J5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICBhc3luYyBjbGVhclBhZ2VIaXN0b3J5KCkge1xuICAgIC8vIFJlc2V0IGFsbCBwYWdlIGhpc3RvcnlcbiAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgW10sIHsgcGVyc2lzdEltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qIC0tIFByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmVzZXREYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RGF0YSgpIHtcbiAgICB0aGlzLl9kYXRhID0geyAuLi50aGlzLl9kYXRhLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5ncyB9O1xuXG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5ID0gW107XG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzID0ge307XG5cbiAgICBjb25zdCBkZWZhdWx0UGVlciA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIgJiYgUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIHRoaXMuX2RhdGEucGVlclVybCA9IChkZWZhdWx0UGVlciAmJiBkZWZhdWx0UGVlci51cmwpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdExvY2FsbHkoaW1tZWRpYXRlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gRXhlY3V0ZSBpbW1lZGlhdGVcbiAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgICAgLy8gSU5GT1xuICAgICAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gUmVtb3ZpbmcgbG9jYWwgc2V0dGluZ3MgZnJvbSBzdG9yYWdlJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSU5GT1xuICAgICAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gU3RvcmUgbG9jYWwgc2V0dGluZ3MnLCB0aGlzLl9kYXRhKTtcblxuICAgICAgICBpZiAodGhpcy5fc2VyaWFsaXplQXNTdHJpbmcpIHtcbiAgICAgICAgICAvLyBGaXggc2VyaWFsaXphdGlvbiBlcnJvciwgaW4gU3VtYXJpcy1BcHBcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldChTRVRUSU5HU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5fZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZLCB0aGlzLl9kYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIHdpdGggZGVsYXlcbiAgICBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKFxuICAgIHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLFxuICAgIG9wdHM/OiB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM/OiBib29sZWFuO1xuICAgICAgcmVtb3ZlVGl0bGVTbWFsbFRhZz86IGJvb2xlYW47XG4gICAgfVxuICApOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSB7XG4gICAgaWYgKCFwYWdlIHx8ICFwYWdlLnRpdGxlIHx8ICFwYWdlLnBhdGgpIHRocm93IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCAncGFnZScsICdwYWdlLnBhdGgnIG9yICdwYWdlLnRpdGxlJ1wiKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IERhdGVVdGlscy5tb21lbnQoKTtcblxuICAgIC8vIENsZWFuIHRpdGxlXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMucmVtb3ZlVGl0bGVTbWFsbFRhZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFJlbW92ZSA8c21hbGw+IEhUTUwgdGFnc1xuICAgICAgY29uc3Qgc21hbGxUYWdJbmRleCA9IHBhZ2UudGl0bGUuaW5kZXhPZignPC9zbWFsbD4nKTtcbiAgICAgIGlmIChzbWFsbFRhZ0luZGV4ICE9PSAtMSkge1xuICAgICAgICBwYWdlLnRpdGxlID0gcGFnZS50aXRsZS5zdWJzdHJpbmcoc21hbGxUYWdJbmRleCArICc8L3NtYWxsPicubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlXG4gICAgICAgIC8vIFJlbW92ZSBjbGFzcz1cIi4uLlwiIEhUTUwgYXR0cmlidXRlXG4gICAgICAgIC5yZXBsYWNlKC9cXHMqY2xhc3M9WydcIl1bXidcIl0rWydcIl0nL2csICcnKVxuICAgICAgICAvLyB0cmltXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHF1ZXJ5IHBhcmFtc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVBhdGhRdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgIHBhZ2UucGF0aCA9IFVybFV0aWxzLnN0cmlwUXVlcnkocGFnZS5wYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZTtcbiAgfVxufVxuIl19
@@ -13549,7 +13549,7 @@ class LocalSettingsService extends StartableService {
13549
13549
  this._optionDefs = Object.values(options?.options || {});
13550
13550
  this._serializeAsString = options?.serializeAsString || false;
13551
13551
  this.resetData();
13552
- this._debug = true; // !environment.production;
13552
+ this._debug = !environment.production;
13553
13553
  if (this._debug)
13554
13554
  console.debug('[settings] Creating service');
13555
13555
  }
@@ -13725,7 +13725,7 @@ class LocalSettingsService extends StartableService {
13725
13725
  return; // Not found
13726
13726
  if (typeof feature === 'string') {
13727
13727
  const lastSyncDate = feature.substring(featurePrefix.length);
13728
- console.debug(`[${featureName}] Last synchronization date: ${lastSyncDate}`);
13728
+ console.info(`[${featureName}] Last synchronization date: ${lastSyncDate}`);
13729
13729
  return {
13730
13730
  name: featureName,
13731
13731
  lastSyncDate,
@@ -13821,6 +13821,10 @@ class LocalSettingsService extends StartableService {
13821
13821
  // If not inside recursive call: fill page history defaults
13822
13822
  if (!pageHistory)
13823
13823
  this.fillPageHistoryDefaults(page, opts);
13824
+ // Workaround to fix error in console, because pageHistory is not an array (seems to occur after a peer changed)
13825
+ if (!pageHistory && !Array.isArray(this._data.pageHistory)) {
13826
+ this._data.pageHistory = [];
13827
+ }
13824
13828
  pageHistory = Array.isArray(pageHistory) ? pageHistory : this._data.pageHistory;
13825
13829
  const index = pageHistory.findIndex((p) =>
13826
13830
  // same path
@@ -13829,8 +13833,8 @@ class LocalSettingsService extends StartableService {
13829
13833
  page.path.startsWith(p.path + '/'));
13830
13834
  // New page: insert it
13831
13835
  if (index === -1) {
13832
- //if (this._debug)
13833
- console.debug('[settings] Adding page to history: ', page);
13836
+ // DEBUG
13837
+ //if (this._debug) console.debug('[settings] Adding page to history: ', page);
13834
13838
  // Prepend to list
13835
13839
  pageHistory.splice(0, 0, page);
13836
13840
  }
@@ -13838,8 +13842,8 @@ class LocalSettingsService extends StartableService {
13838
13842
  const existingPage = pageHistory[index];
13839
13843
  // Same path: replace existing page
13840
13844
  if (pageHistory[index].path === page.path) {
13841
- //if (this._debug)
13842
- console.debug('[settings] Updating existing page in history: ', page);
13845
+ // DEBUG
13846
+ //if (this._debug) console.debug('[settings] Updating existing page in history: ', page);
13843
13847
  pageHistory.splice(index, 1);
13844
13848
  // Copy exiting children
13845
13849
  page.children = existingPage.children || [];
@@ -13861,7 +13865,7 @@ class LocalSettingsService extends StartableService {
13861
13865
  // If max has been reached, remove old pages
13862
13866
  if (pageHistory.length > this._data.pageHistoryMaxSize) {
13863
13867
  const removedPages = pageHistory.splice(this._data.pageHistoryMaxSize, pageHistory.length - this._data.pageHistoryMaxSize);
13864
- console.debug('[settings] Pages removed from history: ', removedPages);
13868
+ //if (this._debug) console.debug('[settings] Pages removed from history: ', removedPages);
13865
13869
  }
13866
13870
  // Apply new value
13867
13871
  await this.applyProperty('pageHistory', pageHistory);
@@ -13874,7 +13878,9 @@ class LocalSettingsService extends StartableService {
13874
13878
  const index = pageHistory.findIndex((p) => p.path === path);
13875
13879
  let found = index !== -1;
13876
13880
  if (found) {
13877
- console.debug('[settings] Remove page history: ', path);
13881
+ // DEBUG
13882
+ if (this._debug)
13883
+ console.debug('[settings] Remove page history: ', path);
13878
13884
  // Remove value
13879
13885
  pageHistory.splice(index, 1);
13880
13886
  }
@@ -13917,11 +13923,13 @@ class LocalSettingsService extends StartableService {
13917
13923
  // Execute immediate
13918
13924
  if (immediate) {
13919
13925
  if (!this._data) {
13920
- console.debug('[settings] Removing local settings from storage');
13926
+ // INFO
13927
+ console.info('[settings] Removing local settings from storage');
13921
13928
  return this.storage.remove(SETTINGS_STORAGE_KEY);
13922
13929
  }
13923
13930
  else {
13924
- console.debug('[settings] Store local settings', this._data);
13931
+ // INFO
13932
+ console.info('[settings] Store local settings', this._data);
13925
13933
  if (this._serializeAsString) {
13926
13934
  // Fix serialization error, in Sumaris-App
13927
13935
  return this.storage.set(SETTINGS_STORAGE_KEY, JSON.stringify(this._data));