@sumaris-net/ngx-components 18.27.7 → 18.27.8

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.
@@ -196,15 +196,11 @@ export class LocalSettingsService extends StartableService {
196
196
  if (opts?.sanitize) {
197
197
  settings.properties = AppPropertiesUtils.sanitize(settings.properties, { definitions: this.optionDefs });
198
198
  }
199
- const data = {
200
- ...this._data,
201
- ...settings,
202
- };
203
- if (equals(data, this._data))
199
+ if (equals(settings, this._data))
204
200
  return; // Skip if no changes
205
201
  // DEBUG
206
202
  //console.debug('[platform] Applying local settings...', settings);
207
- this._data = data;
203
+ this._data = { ...this._data, ...settings };
208
204
  // Save locally
209
205
  if (opts && opts.persistImmediate) {
210
206
  await this.storeLocally(true);
@@ -537,4 +533,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
537
533
  type: Inject,
538
534
  args: [APP_LOCAL_SETTINGS_OPTIONS]
539
535
  }] }] });
540
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUE0QyxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkxQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFDZixRQUFRLEVBQ1IsZUFBZSxFQUNmLGVBQWUsRUFDaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFB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QUNyQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFQUF9MT0NBTEVTLCBpc09uRmllbGRNb2RlLCBMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlIH0gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcblxuaW1wb3J0IHtcbiAgZXF1YWxzLFxuICBnZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgaXNFbXB0eUFycmF5LFxuICBpc05pbCxcbiAgaXNOb3RFbXB0eUFycmF5LFxuICBpc05vdE5pbCxcbiAgaXNOb3ROaWxPckJsYW5rLFxuICB1bmRlZmluZWRJZk51bGxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMYXRMb25nUGF0dGVybiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc0NhcGFjaXRvciwgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcbmltcG9ydCB7IEFwcFByb3BlcnRpZXNVdGlscyB9IGZyb20gJy4uL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLnV0aWxzJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvdXJsLnV0aWxzJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1NUT1JBR0VfS0VZID0gJ3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUyA9IFsnbW9iaWxlJywgJ3RvdWNoVWknIC8qZGVwcmVjYXRlZCovXTtcblxuLy8gZml4bWU6IHRoaXMgY29uc3RhbnQgcG9pbnRzIHRvIHN0YXRpYyBlbnZpcm9ubWVudFxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogTG9jYWxTZXR0aW5ncyA9IHtcbiAgYWNjb3VudEluaGVyaXRhbmNlOiB0cnVlLFxuICBsb2NhbGU6IGVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUsXG4gIGxhdExvbmdGb3JtYXQ6IGVudmlyb25tZW50LmRlZmF1bHRMYXRMb25nRm9ybWF0IHx8ICdERE1NJyxcbiAgcGFnZUhpc3RvcnlNYXhTaXplOiAzLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFNldHRpbmdzT3B0aW9ucyB7XG4gIHNlcmlhbGl6ZUFzU3RyaW5nPzogYm9vbGVhbjsgLy8gZmFsc2UgYnkgZGVmYXVsdFxuICBvcHRpb25zOiBGb3JtRmllbGREZWZpbml0aW9uTWFwO1xuICBza2lwRW1pdFBhZ2VzQ2hhbmdlcz86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMge1xuICAvKipcbiAgICogUmVwcmVzZW50cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgcGF0aCBpbiBhIGdpdmVuIFVSTCBvciByZXNvdXJjZS5cbiAgICpcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSwgYW55IHF1ZXJ5IHBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdGhlIHBhdGhcbiAgICogd2lsbCBiZSBzdHJpcHBlZCBvciBpZ25vcmVkIGR1cmluZyBwcm9jZXNzaW5nLlxuICAgKiBXaGVuIHNldCB0byBgZmFsc2VgIG9yIHVuZGVmaW5lZCwgcXVlcnkgcGFyYW1ldGVycyBpbiB0aGUgcGF0aFxuICAgKiB3aWxsIHJlbWFpbiBpbnRhY3QgYW5kIGJlIGNvbnNpZGVyZWQuXG4gICAqXG4gICAqIENvbW1vbmx5IHVzZWQgaW4gc2NlbmFyaW9zIHdoZXJlIFVSTCBub3JtYWxpemF0aW9uIG9yIHNpbXBsaWZpY2F0aW9uIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSB0aGUgPHNtYWxsPiBIVE1MIHRhZ1xuICAgKiBmcm9tIHRoZSB0aXRsZS4gV2hlbiBzZXQgdG8gdHJ1ZSwgYW55IDxzbWFsbD4gdGFncyB3aXRoaW4gdGhlIHRpdGxlXG4gICAqIHdpbGwgYmUgc3RyaXBwZWQgb3IgaWdub3JlZC4gRGVmYXVsdHMgdG8gdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciBhbiBldmVudCBzaG91bGQgYmUgZW1pdHRlZCBvciBub3QuXG4gICAqXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIHJlbGV2YW50IGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgKiBXaGVuIHNldCB0byBgZmFsc2VgIG9yIG9taXR0ZWQsIG5vIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC5cbiAgICpcbiAgICogVHlwaWNhbGx5IHVzZWQgdG8gY29udHJvbCB0aGUgcHJvcGFnYXRpb24gb2YgY2hhbmdlcyBvciBhY3Rpb25zXG4gICAqIHRvIGV2ZW50IGxpc3RlbmVycyB3aXRoaW4gYSBzeXN0ZW0gb3IgYXBwbGljYXRpb24uXG4gICAqL1xuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NFVFRJTkdTID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4+KCdEZWZhdWx0TG9jYWxTZXR0aW5ncycpO1xuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPExvY2FsU2V0dGluZ3NPcHRpb25zPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGRlcHM6IFtBUFBfTE9DQUxFU10sXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsU2V0dGluZ3NTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTxMb2NhbFNldHRpbmdzPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbkRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VyaWFsaXplQXNTdHJpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NraXBFbWl0UGFnZXNDaGFuZ2VzOiBib29sZWFuO1xuICBwcml2YXRlIF8kc3RvcmVMb2NhbGx5RXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcmVhZG9ubHkgb25DaGFuZ2UgPSBuZXcgU3ViamVjdDxMb2NhbFNldHRpbmdzPigpO1xuICByZWFkb25seSBvblN0b3JlZExvY2FsbHkgPSBuZXcgRXZlbnRFbWl0dGVyPExvY2FsU2V0dGluZ3M+KCk7XG4gIGRhcmtNb2RlJCA9IG1lcmdlKHRoaXMub25DaGFuZ2UsIHRoaXMuc3RhcnRTdWJqZWN0KS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKChkYXRhKSA9PiBkYXRhPy5kYXJrTW9kZSB8fCBmYWxzZSlcbiAgKTtcbiAgbG9jYWxlJCA9IG1lcmdlKHRoaXMub25DaGFuZ2UsIHRoaXMuc3RhcnRTdWJqZWN0KS5waXBlKFxuICAgIHN0YXJ0V2l0aCh0aGlzLnNldHRpbmdzKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIG1hcCgoZGF0YSkgPT4gZGF0YT8ubG9jYWxlIHx8IHRoaXMuZW52aXJvbm1lbnQ/LmRlZmF1bHRMb2NhbGUpXG4gICk7XG5cbiAgZ2V0IHNldHRpbmdzKCk6IExvY2FsU2V0dGluZ3Mge1xuICAgIHJldHVybiB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxvY2FsZSkgfHwgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmc7XG4gIH1cblxuICBnZXQgbGF0TG9uZ0Zvcm1hdCgpOiBMYXRMb25nUGF0dGVybiB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGF0TG9uZ0Zvcm1hdCkgfHwgJ0RETU0nO1xuICB9XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9kYXRhLnVzYWdlTW9kZSkgPyB0aGlzLl9kYXRhLnVzYWdlTW9kZSA6IGlzQ2FwYWNpdG9yKHdpbmRvdykgJiYgaXNNb2JpbGUod2luZG93KSA/ICdGSUVMRCcgOiAnREVTSyc7XG4gIH1cblxuICBzZXQgdXNhZ2VNb2RlKHZhbHVlOiBVc2FnZU1vZGUpIHtcbiAgICB0aGlzLmFwcGx5UHJvcGVydHkoJ3VzYWdlTW9kZScsIHZhbHVlKTtcbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEubW9iaWxlKSA/IHRoaXMuX2RhdGEubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIHNldCBtb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2VIaXN0b3J5KCk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10ge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB8fCBbXTtcbiAgfVxuXG4gIGdldCBhbGxvd0RhcmtNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50Py5hbGxvd0RhcmtNb2RlID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzRGFya01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dEYXJrTW9kZSAmJiB0aGlzLl9kYXRhPy5kYXJrTW9kZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0NBTF9TRVRUSU5HUykgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2V0dGluZ3M6IExvY2FsU2V0dGluZ3MsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUykgb3B0aW9uczogTG9jYWxTZXR0aW5nc09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0geyAuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5ncyB9O1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMob3B0aW9ucz8ub3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5fc2VyaWFsaXplQXNTdHJpbmcgPSBvcHRpb25zPy5zZXJpYWxpemVBc1N0cmluZyB8fCBmYWxzZTtcbiAgICB0aGlzLl9za2lwRW1pdFBhZ2VzQ2hhbmdlcyA9IG9wdGlvbnM/LnNraXBFbWl0UGFnZXNDaGFuZ2VzID8/IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNldERhdGEoKTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIENyZWF0aW5nIHNlcnZpY2UnKTtcbiAgfVxuXG4gIG5nT25TdGFydCgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3M+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFN0YXJ0aW5nIHNlcnZpY2UuLi4nKTtcblxuICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHRoaXMubW9iaWxlO1xuICAgIHRoaXMuX2RhdGEudXNhZ2VNb2RlID0gdGhpcy51c2FnZU1vZGU7XG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLmxvY2FsZTtcblxuICAgIC8vIExpc3RlbiBwZXJzaXN0IGV2ZW50XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuXyRzdG9yZUxvY2FsbHlFdmVudEVtaXR0ZXJcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLCAvLyBhZGQgYSBkZWxheSBvZiAyIHNlY29uZHNcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5zdGFydGVkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9yZUxvY2FsbHkodHJ1ZSkpXG4gICAgKTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHJldHVybiB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG4gIH1cblxuICBpc1VzYWdlTW9kZShtb2RlOiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51c2FnZU1vZGUgPT09IG1vZGU7XG4gIH1cblxuICBpc09uRmllbGRNb2RlKHZhbHVlPzogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzT25GaWVsZE1vZGUodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsKHNldHRpbmdzKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gdHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG5cbiAgICAgIC8vIEF2b2lkIHRvIG92ZXJyaWRlIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAgICBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUy5mb3JFYWNoKCh0cmFuc2llbnRLZXkpID0+IHtcbiAgICAgICAgZGVsZXRlIHJlc3RvcmVkRGF0YVt0cmFuc2llbnRLZXldO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lcmdlIGludG8gZXhpc3RpbmcgZGF0YVxuICAgICAgZGF0YSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgcmVzdG9yZWREYXRhKTtcblxuICAgICAgLy8gRml4IGtub3duIGF0dHJpYnV0ZVxuICAgICAgaWYgKGRhdGEucGFnZUhpc3RvcnkgJiYgIUFycmF5LmlzQXJyYXkoZGF0YS5wYWdlSGlzdG9yeSkpIGRhdGEucGFnZUhpc3RvcnkgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIGRhcmtNb2RlLCBpZiBub3Qgc2V0XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LmFsbG93RGFya01vZGUgIT09IHRydWUpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmRhcmtNb2RlO1xuICAgICAgZGVsZXRlIGRhdGEuYXV0b0RhcmtNb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwoZGF0YS5kYXJrTW9kZSkgfHwgZGF0YS5hdXRvRGFya01vZGUgIT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEF1dG8tZGV0ZWN0IHN5c3RlbSBkYXJrIG1vZGUuLi4nKTtcbiAgICAgIGRhdGEuZGFya01vZGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7XG4gICAgICBkYXRhLmF1dG9EYXJrTW9kZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMub25DaGFuZ2UubmV4dChkYXRhKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0UHJvcGVydHk8VCA9IHN0cmluZz4oa2V5T3JEZWY6IHN0cmluZyB8IEZvcm1GaWVsZERlZmluaXRpb24sIHZhbHVlOiBULCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBpbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIWtleU9yRGVmKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3NldHRpbmdzXSBTZXR0aW5nIHByb3BlcnR5ICR7a2V5T3JEZWZ9IHRvOmAsIHZhbHVlKTtcblxuICAgIHRoaXMuX2RhdGEucHJvcGVydGllcyA9IHRoaXMuX2RhdGEucHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdID0gaXNOaWwodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWUudG9TdHJpbmcoKTtcblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RvcmVMb2NhbGx5KG9wdHM/LmltbWVkaWF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvcGVydHkoa2V5T3JEZWY6IHN0cmluZyB8IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5KGtleU9yRGVmLmtleSwgaXNOb3ROaWwoZGVmYXVsdFZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IGtleU9yRGVmLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWRJZk51bGwoZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNCb29sZWFuKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgJiYgdmFsdWUgIT09ICdmYWxzZScgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzSW50KGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHBhcnNlSW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNOdW1iZXJzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocGFyc2VGbG9hdCkgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBbcGFyc2VGbG9hdCh2YWx1ZSldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc1N0cmluZ3MoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnLCcpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzT2JqZWN0cyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgLy8gUGFyc2UgYXJyYXlcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5KHNldHRpbmdzOiBQYXJ0aWFsPExvY2FsU2V0dGluZ3M+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbjsgc2FuaXRpemU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgLy8gU2FuaXRpemUgKGtlZXAgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBzZXQgYnkgdXNlclxuICAgIGlmIChvcHRzPy5zYW5pdGl6ZSkge1xuICAgICAgc2V0dGluZ3MucHJvcGVydGllcyA9IEFwcFByb3BlcnRpZXNVdGlscy5zYW5pdGl6ZShzZXR0aW5ncy5wcm9wZXJ0aWVzLCB7IGRlZmluaXRpb25zOiB0aGlzLm9wdGlvbkRlZnMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIC4uLnRoaXMuX2RhdGEsXG4gICAgICAuLi5zZXR0aW5ncyxcbiAgICB9O1xuXG4gICAgaWYgKGVxdWFscyhkYXRhLCB0aGlzLl9kYXRhKSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vIGNoYW5nZXNcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIEFwcGx5aW5nIGxvY2FsIHNldHRpbmdzLi4uJywgc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG5cbiAgICAvLyBTYXZlIGxvY2FsbHlcbiAgICBpZiAob3B0cyAmJiBvcHRzLnBlcnNpc3RJbW1lZGlhdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmVMb2NhbGx5KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlTG9jYWxseSgpOyAvLyBObyBBV0FJVFxuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXBwbHlQcm9wZXJ0eShrZXk6IGtleW9mIExvY2FsU2V0dGluZ3MsIHZhbHVlOiBhbnksIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBjaGFuZ2VzID0ge307XG4gICAgY2hhbmdlc1trZXldID0gdmFsdWU7XG4gICAgYXdhaXQgdGhpcy5hcHBseShjaGFuZ2VzLCBvcHRzKTtcbiAgfVxuXG4gIGdldFBhZ2VTZXR0aW5nczxUID0gYW55PihwYWdlSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lPzogc3RyaW5nKTogVCB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnBhZ2VzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgodGhpcy5fZGF0YS5wYWdlcywga2V5ICsgJy4nICsgcHJvcGVydHlOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEucGFnZXNba2V5XTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVQYWdlU2V0dGluZyhwYWdlSWQ6IHN0cmluZywgdmFsdWU6IGFueSwgcHJvcGVydHlOYW1lPzogc3RyaW5nLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLnBhZ2VzID0gdGhpcy5fZGF0YS5wYWdlcyB8fCB7fTtcblxuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKHByb3BlcnR5TmFtZSkge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdGhpcy5fZGF0YS5wYWdlc1trZXldIHx8IHt9O1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudCAoaWYgbm90IHNraXBwZWQpXG4gICAgY29uc3QgZW1pdEV2ZW50ID0gb3B0cz8uZW1pdEV2ZW50ICE9PSBmYWxzZSAmJiAhdGhpcy5fc2tpcEVtaXRQYWdlc0NoYW5nZXM7XG4gICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5ncyAtIE5PIEFXQUlUXG4gICAgdGhpcy5zdG9yZUxvY2FsbHkoKTtcbiAgfVxuXG4gIGdldE9mZmxpbmVGZWF0dXJlPEYgPSBhbnk+KGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBPZmZsaW5lRmVhdHVyZTxGPiB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBpc0VtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICghZmVhdHVyZU5hbWUpIHRocm93IEVycm9yKFwiTWlzc2luZyAnZmVhdHVyZU5hbWUnIGFyZ3VtZW50XCIpO1xuXG4gICAgZmVhdHVyZU5hbWUgPSBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlTmFtZSArICcjJztcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZCgoZikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZU5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKCFmZWF0dXJlKSByZXR1cm47IC8vIE5vdCBmb3VuZFxuICAgIGlmICh0eXBlb2YgZmVhdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxhc3RTeW5jRGF0ZSA9IGZlYXR1cmUuc3Vic3RyaW5nKGZlYXR1cmVQcmVmaXgubGVuZ3RoKTtcbiAgICAgIGNvbnNvbGUuaW5mbyhgWyR7ZmVhdHVyZU5hbWV9XSBMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlOiAke2xhc3RTeW5jRGF0ZX1gKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLFxuICAgICAgICBsYXN0U3luY0RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZTtcbiAgfVxuXG4gIGdldE9mZmxpbmVGZWF0dXJlTGFzdFN5bmNEYXRlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBNb21lbnQge1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcbiAgICByZXR1cm4gZmVhdHVyZSAmJiBmcm9tRGF0ZUlTT1N0cmluZyhmZWF0dXJlLmxhc3RTeW5jRGF0ZSk7XG4gIH1cblxuICBoYXNPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmZWF0dXJlTmFtZSkgcmV0dXJuIGlzTm90TmlsKHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiBpc05vdEVtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpO1xuICB9XG5cbiAgc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmU6IE9mZmxpbmVGZWF0dXJlKSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBbXTtcblxuICAgIGZlYXR1cmUubmFtZSA9IGZlYXR1cmUubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmUubmFtZSArICcjJztcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZEluZGV4KChmKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGYgPT09ICdzdHJpbmcnKSByZXR1cm4gZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoZmVhdHVyZVByZWZpeCk7XG4gICAgICBpZiAoZiAmJiB0eXBlb2YgZiA9PT0gJ29iamVjdCcgJiYgZi5uYW1lKSByZXR1cm4gZi5uYW1lID09PSBmZWF0dXJlLm5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlc1tleGlzdGluZ0luZGV4XSA9IGZlYXR1cmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzIC0gTk8gQVdBSVRcbiAgICB0aGlzLnN0b3JlTG9jYWxseSgpO1xuICB9XG5cbiAgbWFya09mZmxpbmVGZWF0dXJlQXNTeW5jKGZlYXR1cmVOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgZmVhdHVyZSA9IHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpO1xuXG4gICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICBmZWF0dXJlID0gPE9mZmxpbmVGZWF0dXJlPntcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgbGFzdFN5bmNEYXRlOiBEYXRlVXRpbHMubW9tZW50KCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZlYXR1cmUubGFzdFN5bmNEYXRlID0gRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zYXZlT2ZmbGluZUZlYXR1cmUoZmVhdHVyZSk7XG4gIH1cblxuICByZW1vdmVPZmZsaW5lRmVhdHVyZXMoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gW107XG5cbiAgICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5ncyAtIE5PIEFXQUlUXG4gICAgICB0aGlzLnN0b3JlTG9jYWxseSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkRGlzcGxheUF0dHJpYnV0ZXMoZmllbGROYW1lOiBzdHJpbmcsIGRlZmF1bHRBdHRyaWJ1dGVzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXNbYHN1bWFyaXMuZmllbGQuJHtmaWVsZE5hbWV9LmF0dHJpYnV0ZXNgXTtcbiAgICAvLyBOb3RoaW5nIGZvdW5kIGluIHNldHRpbmdzOiByZXR1cm4gZGVmYXVsdHNcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGdldFBhZ2VGaWVsZERlZmF1bHRWYWx1ZShwYWdlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhwYWdlSWQsIGBmaWVsZC4ke2ZpZWxkTmFtZX0uZGVmYXVsdFZhbHVlYCk7XG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb24oZGVmOiBGb3JtRmllbGREZWZpbml0aW9uLCBvcHRzPzogeyByZXBsYWNlSWZFeGlzdHM/OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29wdGlvbkRlZnMuZmluZEluZGV4KChmKSA9PiBmLmtleSA9PT0gZGVmLmtleSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKG9wdHM/LnJlcGxhY2VJZkV4aXN0cyAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgICAgfVxuICAgICAgLy8gUmVwbGFjZSBleGlzdGluZ1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbc2V0dGluZ3NdIFVwZGF0aW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICAgIHRoaXMuX29wdGlvbkRlZnNbaW5kZXhdID0gZGVmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQWRkaW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICAgIHRoaXMuX29wdGlvbkRlZnMucHVzaChkZWYpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9ucyhkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICAoZGVmcyB8fCBbXSkuZm9yRWFjaCgoZGVmKSA9PiB0aGlzLnJlZ2lzdGVyT3B0aW9uKGRlZikpO1xuICB9XG5cbiAgYXN5bmMgYWRkVG9QYWdlSGlzdG9yeShcbiAgICBwYWdlOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSxcbiAgICBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMsXG4gICAgcGFnZUhpc3Rvcnk/OiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdIC8vIHVzZWQgZm9yIHJlY3Vyc2l2ZSBjYWxsIHRvIGNoaWxkcmVuXG4gICkge1xuICAgIC8vIElmIG5vdCBpbnNpZGUgcmVjdXJzaXZlIGNhbGw6IGZpbGwgcGFnZSBoaXN0b3J5IGRlZmF1bHRzXG4gICAgaWYgKCFwYWdlSGlzdG9yeSkgdGhpcy5maWxsUGFnZUhpc3RvcnlEZWZhdWx0cyhwYWdlLCBvcHRzKTtcblxuICAgIC8vIFdvcmthcm91bmQgdG8gZml4IGVycm9yIGluIGNvbnNvbGUsIGJlY2F1c2UgcGFnZUhpc3RvcnkgaXMgbm90IGFuIGFycmF5IChzZWVtcyB0byBvY2N1ciBhZnRlciBhIHBlZXIgY2hhbmdlZClcbiAgICBpZiAoIXBhZ2VIaXN0b3J5ICYmICFBcnJheS5pc0FycmF5KHRoaXMuX2RhdGEucGFnZUhpc3RvcnkpKSB7XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5ID0gW107XG4gICAgfVxuXG4gICAgcGFnZUhpc3RvcnkgPSBBcnJheS5pc0FycmF5KHBhZ2VIaXN0b3J5KSA/IHBhZ2VIaXN0b3J5IDogdGhpcy5fZGF0YS5wYWdlSGlzdG9yeTtcblxuICAgIGNvbnN0IGluZGV4ID0gcGFnZUhpc3RvcnkuZmluZEluZGV4KFxuICAgICAgKHApID0+XG4gICAgICAgIC8vIHNhbWUgcGF0aFxuICAgICAgICBwLnBhdGggPT09IHBhZ2UucGF0aCB8fFxuICAgICAgICAvLyBvciBzdWItcGF0aFxuICAgICAgICBwYWdlLnBhdGguc3RhcnRzV2l0aChwLnBhdGggKyAnLycpXG4gICAgKTtcblxuICAgIC8vIE5ldyBwYWdlOiBpbnNlcnQgaXRcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gQWRkaW5nIHBhZ2UgdG8gaGlzdG9yeTogJywgcGFnZSk7XG5cbiAgICAgIC8vIFByZXBlbmQgdG8gbGlzdFxuICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKDAsIDAsIHBhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleGlzdGluZ1BhZ2UgPSBwYWdlSGlzdG9yeVtpbmRleF07XG5cbiAgICAgIC8vIFNhbWUgcGF0aDogcmVwbGFjZSBleGlzdGluZyBwYWdlXG4gICAgICBpZiAocGFnZUhpc3RvcnlbaW5kZXhdLnBhdGggPT09IHBhZ2UucGF0aCkge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2lmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBVcGRhdGluZyBleGlzdGluZyBwYWdlIGluIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gQ29weSBleGl0aW5nIGNoaWxkcmVuXG4gICAgICAgIHBhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IHNhbWUgcGF0aCAoc2hvdWxkIGJlIGEgcGFyZW50IHBhZ2UpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LCBpZiBub3QgZXhpc3RzXG4gICAgICAgIGV4aXN0aW5nUGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBhcmVudCB0aW1lXG4gICAgICAgIGV4aXN0aW5nUGFnZS50aW1lID0gcGFnZS50aW1lO1xuXG4gICAgICAgIC8vIEFkZCBwYWdlIGFzIHBhcmVudCdzIGNoaWxkcmVuIChyZWN1cnNpdmUgY2FsbClcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIG9wdHMsIGV4aXN0aW5nUGFnZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG4gICAgICAvLyBJZiBtYXggaGFzIGJlZW4gcmVhY2hlZCwgcmVtb3ZlIG9sZCBwYWdlc1xuICAgICAgaWYgKHBhZ2VIaXN0b3J5Lmxlbmd0aCA+IHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYWdlcyA9IHBhZ2VIaXN0b3J5LnNwbGljZSh0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSwgcGFnZUhpc3RvcnkubGVuZ3RoIC0gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUpO1xuICAgICAgICAvL2lmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBQYWdlcyByZW1vdmVkIGZyb20gaGlzdG9yeTogJywgcmVtb3ZlZFBhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbmV3IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9LFxuICAgIHBhZ2VIaXN0b3J5OiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdID0gdW5kZWZpbmVkLCAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlbilcbiAgICBkZXB0aCA9IDBcbiAgKSB7XG4gICAgY29uc3Qgcm9vdCA9IGRlcHRoID09PSAwO1xuICAgIHBhZ2VIaXN0b3J5ID0gcGFnZUhpc3RvcnkgfHwgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeT8uc2xpY2UoKSAvKmNsb25lLCB0byBmb3JjZSBhcHBseSB0byBzYXZlICovIHx8IFtdO1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgoKHApID0+IHAucGF0aCA9PT0gcGF0aCk7XG4gICAgbGV0IGZvdW5kID0gaW5kZXggIT09IC0xO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmUgcGFnZSBoaXN0b3J5OiAnLCBwYXRoKTtcblxuICAgICAgLy8gUmVtb3ZlIHZhbHVlXG4gICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZWFyY2ggcGF0aCBvbiBjaGlsZHJlbiAoc3RvcCB3aGVuIGZvdW5kKVxuICAgICAgZm91bmQgPVxuICAgICAgICBwYWdlSGlzdG9yeVxuICAgICAgICAgIC5tYXAoKHApID0+IHAuY2hpbGRyZW4pXG4gICAgICAgICAgLmZpbHRlcihpc05vdEVtcHR5QXJyYXkpXG4gICAgICAgICAgLmZpbmRJbmRleCgoY2hpbGRyZW4pID0+IHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCwgb3B0cywgY2hpbGRyZW4sIChkZXB0aCB8fCAwKSArIDEpKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIHJvb3QgbGV2ZWwpXG4gICAgaWYgKGZvdW5kICYmIHJvb3QpIHtcbiAgICAgIC8vIEFwcGx5IGNoYW5nZXNcbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCBwYWdlSGlzdG9yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJQYWdlSGlzdG9yeSgpIHtcbiAgICAvLyBSZXNldCBhbGwgcGFnZSBoaXN0b3J5XG4gICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIFtdLCB7IHBlcnNpc3RJbW1lZGlhdGU6IHRydWUgfSk7XG4gIH1cblxuICAvKiAtLSBQcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldERhdGEoKSB7XG4gICAgdGhpcy5fZGF0YSA9IHsgLi4udGhpcy5fZGF0YSwgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3MgfTtcblxuICAgIHRoaXMuX2RhdGEubG9jYWxlID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmcgfHwgdGhpcy5fZGF0YS5sb2NhbGU7XG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSA9IFtdO1xuICAgIHRoaXMuX2RhdGEucHJvcGVydGllcyA9IHt9O1xuXG4gICAgY29uc3QgZGVmYXVsdFBlZXIgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyICYmIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKTtcbiAgICB0aGlzLl9kYXRhLnBlZXJVcmwgPSAoZGVmYXVsdFBlZXIgJiYgZGVmYXVsdFBlZXIudXJsKSB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5zdGFydGVkKSB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0b3JlTG9jYWxseShpbW1lZGlhdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBFeGVjdXRlIGltbWVkaWF0ZVxuICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgIGlmICghdGhpcy5fZGF0YSkge1xuICAgICAgICAvLyBJTkZPXG4gICAgICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBSZW1vdmluZyBsb2NhbCBzZXR0aW5ncyBmcm9tIHN0b3JhZ2UnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnJlbW92ZShTRVRUSU5HU19TVE9SQUdFX0tFWSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElORk9cbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gU3RvcmUgbG9jYWwgc2V0dGluZ3MnLCB0aGlzLl9kYXRhKTtcbiAgICAgICAgICBpZiAodGhpcy5fc2VyaWFsaXplQXNTdHJpbmcpIHtcbiAgICAgICAgICAgIC8vIEZpeCBzZXJpYWxpemF0aW9uIGVycm9yLCBpbiBTdW1hcmlzLUFwcFxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIHRoaXMuX2RhdGEpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMub25TdG9yZWRMb2NhbGx5LmVtaXQodGhpcy5fZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIHdpdGggZGVsYXlcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuXyRzdG9yZUxvY2FsbHlFdmVudEVtaXR0ZXIuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMoXG4gICAgcGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgb3B0cz86IHtcbiAgICAgIHJlbW92ZVBhdGhRdWVyeVBhcmFtcz86IGJvb2xlYW47XG4gICAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICdwYWdlJywgJ3BhZ2UucGF0aCcgb3IgJ3BhZ2UudGl0bGUnXCIpO1xuXG4gICAgLy8gU2V0IHRpbWVcbiAgICBwYWdlLnRpbWUgPSBwYWdlLnRpbWUgfHwgRGF0ZVV0aWxzLm1vbWVudCgpO1xuXG4gICAgLy8gQ2xlYW4gdGl0bGVcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVUaXRsZVNtYWxsVGFnICE9PSBmYWxzZSkge1xuICAgICAgLy8gUmVtb3ZlIDxzbWFsbD4gSFRNTCB0YWdzXG4gICAgICBjb25zdCBzbWFsbFRhZ0luZGV4ID0gcGFnZS50aXRsZS5pbmRleE9mKCc8L3NtYWxsPicpO1xuICAgICAgaWYgKHNtYWxsVGFnSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnN1YnN0cmluZyhzbWFsbFRhZ0luZGV4ICsgJzwvc21hbGw+Jy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcGFnZS50aXRsZSA9IHBhZ2UudGl0bGVcbiAgICAgICAgLy8gUmVtb3ZlIGNsYXNzPVwiLi4uXCIgSFRNTCBhdHRyaWJ1dGVcbiAgICAgICAgLnJlcGxhY2UoL1xccypjbGFzcz1bJ1wiXVteJ1wiXStbJ1wiXScvZywgJycpXG4gICAgICAgIC8vIHRyaW1cbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMucmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zICE9PSBmYWxzZSkge1xuICAgICAgcGFnZS5wYXRoID0gVXJsVXRpbHMuc3RyaXBRdWVyeShwYWdlLnBhdGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG59XG4iXX0=
536
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUE0QyxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkxQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFDZixRQUFRLEVBQ1IsZUFBZSxFQUNmLGVBQWUsRUFDaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFB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QUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFQUF9MT0NBTEVTLCBpc09uRmllbGRNb2RlLCBMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlIH0gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcblxuaW1wb3J0IHtcbiAgZXF1YWxzLFxuICBnZXRQcm9wZXJ0eUJ5UGF0aCxcbiAgaXNFbXB0eUFycmF5LFxuICBpc05pbCxcbiAgaXNOb3RFbXB0eUFycmF5LFxuICBpc05vdE5pbCxcbiAgaXNOb3ROaWxPckJsYW5rLFxuICB1bmRlZmluZWRJZk51bGxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMYXRMb25nUGF0dGVybiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc0NhcGFjaXRvciwgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcbmltcG9ydCB7IEFwcFByb3BlcnRpZXNVdGlscyB9IGZyb20gJy4uL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLnV0aWxzJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvdXJsLnV0aWxzJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1NUT1JBR0VfS0VZID0gJ3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUyA9IFsnbW9iaWxlJywgJ3RvdWNoVWknIC8qZGVwcmVjYXRlZCovXTtcblxuLy8gZml4bWU6IHRoaXMgY29uc3RhbnQgcG9pbnRzIHRvIHN0YXRpYyBlbnZpcm9ubWVudFxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogTG9jYWxTZXR0aW5ncyA9IHtcbiAgYWNjb3VudEluaGVyaXRhbmNlOiB0cnVlLFxuICBsb2NhbGU6IGVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUsXG4gIGxhdExvbmdGb3JtYXQ6IGVudmlyb25tZW50LmRlZmF1bHRMYXRMb25nRm9ybWF0IHx8ICdERE1NJyxcbiAgcGFnZUhpc3RvcnlNYXhTaXplOiAzLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFNldHRpbmdzT3B0aW9ucyB7XG4gIHNlcmlhbGl6ZUFzU3RyaW5nPzogYm9vbGVhbjsgLy8gZmFsc2UgYnkgZGVmYXVsdFxuICBvcHRpb25zOiBGb3JtRmllbGREZWZpbml0aW9uTWFwO1xuICBza2lwRW1pdFBhZ2VzQ2hhbmdlcz86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMge1xuICAvKipcbiAgICogUmVwcmVzZW50cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgcGF0aCBpbiBhIGdpdmVuIFVSTCBvciByZXNvdXJjZS5cbiAgICpcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSwgYW55IHF1ZXJ5IHBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdGhlIHBhdGhcbiAgICogd2lsbCBiZSBzdHJpcHBlZCBvciBpZ25vcmVkIGR1cmluZyBwcm9jZXNzaW5nLlxuICAgKiBXaGVuIHNldCB0byBgZmFsc2VgIG9yIHVuZGVmaW5lZCwgcXVlcnkgcGFyYW1ldGVycyBpbiB0aGUgcGF0aFxuICAgKiB3aWxsIHJlbWFpbiBpbnRhY3QgYW5kIGJlIGNvbnNpZGVyZWQuXG4gICAqXG4gICAqIENvbW1vbmx5IHVzZWQgaW4gc2NlbmFyaW9zIHdoZXJlIFVSTCBub3JtYWxpemF0aW9uIG9yIHNpbXBsaWZpY2F0aW9uIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHJlbW92ZSB0aGUgPHNtYWxsPiBIVE1MIHRhZ1xuICAgKiBmcm9tIHRoZSB0aXRsZS4gV2hlbiBzZXQgdG8gdHJ1ZSwgYW55IDxzbWFsbD4gdGFncyB3aXRoaW4gdGhlIHRpdGxlXG4gICAqIHdpbGwgYmUgc3RyaXBwZWQgb3IgaWdub3JlZC4gRGVmYXVsdHMgdG8gdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciBhbiBldmVudCBzaG91bGQgYmUgZW1pdHRlZCBvciBub3QuXG4gICAqXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIHJlbGV2YW50IGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgKiBXaGVuIHNldCB0byBgZmFsc2VgIG9yIG9taXR0ZWQsIG5vIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC5cbiAgICpcbiAgICogVHlwaWNhbGx5IHVzZWQgdG8gY29udHJvbCB0aGUgcHJvcGFnYXRpb24gb2YgY2hhbmdlcyBvciBhY3Rpb25zXG4gICAqIHRvIGV2ZW50IGxpc3RlbmVycyB3aXRoaW4gYSBzeXN0ZW0gb3IgYXBwbGljYXRpb24uXG4gICAqL1xuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NFVFRJTkdTID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4+KCdEZWZhdWx0TG9jYWxTZXR0aW5ncycpO1xuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPExvY2FsU2V0dGluZ3NPcHRpb25zPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGRlcHM6IFtBUFBfTE9DQUxFU10sXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsU2V0dGluZ3NTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTxMb2NhbFNldHRpbmdzPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbkRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VyaWFsaXplQXNTdHJpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NraXBFbWl0UGFnZXNDaGFuZ2VzOiBib29sZWFuO1xuICBwcml2YXRlIF8kc3RvcmVMb2NhbGx5RXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcmVhZG9ubHkgb25DaGFuZ2UgPSBuZXcgU3ViamVjdDxMb2NhbFNldHRpbmdzPigpO1xuICByZWFkb25seSBvblN0b3JlZExvY2FsbHkgPSBuZXcgRXZlbnRFbWl0dGVyPExvY2FsU2V0dGluZ3M+KCk7XG4gIGRhcmtNb2RlJCA9IG1lcmdlKHRoaXMub25DaGFuZ2UsIHRoaXMuc3RhcnRTdWJqZWN0KS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKChkYXRhKSA9PiBkYXRhPy5kYXJrTW9kZSB8fCBmYWxzZSlcbiAgKTtcbiAgbG9jYWxlJCA9IG1lcmdlKHRoaXMub25DaGFuZ2UsIHRoaXMuc3RhcnRTdWJqZWN0KS5waXBlKFxuICAgIHN0YXJ0V2l0aCh0aGlzLnNldHRpbmdzKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIG1hcCgoZGF0YSkgPT4gZGF0YT8ubG9jYWxlIHx8IHRoaXMuZW52aXJvbm1lbnQ/LmRlZmF1bHRMb2NhbGUpXG4gICk7XG5cbiAgZ2V0IHNldHRpbmdzKCk6IExvY2FsU2V0dGluZ3Mge1xuICAgIHJldHVybiB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxvY2FsZSkgfHwgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmc7XG4gIH1cblxuICBnZXQgbGF0TG9uZ0Zvcm1hdCgpOiBMYXRMb25nUGF0dGVybiB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGF0TG9uZ0Zvcm1hdCkgfHwgJ0RETU0nO1xuICB9XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9kYXRhLnVzYWdlTW9kZSkgPyB0aGlzLl9kYXRhLnVzYWdlTW9kZSA6IGlzQ2FwYWNpdG9yKHdpbmRvdykgJiYgaXNNb2JpbGUod2luZG93KSA/ICdGSUVMRCcgOiAnREVTSyc7XG4gIH1cblxuICBzZXQgdXNhZ2VNb2RlKHZhbHVlOiBVc2FnZU1vZGUpIHtcbiAgICB0aGlzLmFwcGx5UHJvcGVydHkoJ3VzYWdlTW9kZScsIHZhbHVlKTtcbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEubW9iaWxlKSA/IHRoaXMuX2RhdGEubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIHNldCBtb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2VIaXN0b3J5KCk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10ge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB8fCBbXTtcbiAgfVxuXG4gIGdldCBhbGxvd0RhcmtNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50Py5hbGxvd0RhcmtNb2RlID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzRGFya01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dEYXJrTW9kZSAmJiB0aGlzLl9kYXRhPy5kYXJrTW9kZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0NBTF9TRVRUSU5HUykgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2V0dGluZ3M6IExvY2FsU2V0dGluZ3MsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUykgb3B0aW9uczogTG9jYWxTZXR0aW5nc09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0geyAuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5ncyB9O1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMob3B0aW9ucz8ub3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5fc2VyaWFsaXplQXNTdHJpbmcgPSBvcHRpb25zPy5zZXJpYWxpemVBc1N0cmluZyB8fCBmYWxzZTtcbiAgICB0aGlzLl9za2lwRW1pdFBhZ2VzQ2hhbmdlcyA9IG9wdGlvbnM/LnNraXBFbWl0UGFnZXNDaGFuZ2VzID8/IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNldERhdGEoKTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIENyZWF0aW5nIHNlcnZpY2UnKTtcbiAgfVxuXG4gIG5nT25TdGFydCgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3M+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFN0YXJ0aW5nIHNlcnZpY2UuLi4nKTtcblxuICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHRoaXMubW9iaWxlO1xuICAgIHRoaXMuX2RhdGEudXNhZ2VNb2RlID0gdGhpcy51c2FnZU1vZGU7XG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLmxvY2FsZTtcblxuICAgIC8vIExpc3RlbiBwZXJzaXN0IGV2ZW50XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuXyRzdG9yZUxvY2FsbHlFdmVudEVtaXR0ZXJcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLCAvLyBhZGQgYSBkZWxheSBvZiAyIHNlY29uZHNcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5zdGFydGVkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9yZUxvY2FsbHkodHJ1ZSkpXG4gICAgKTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHJldHVybiB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG4gIH1cblxuICBpc1VzYWdlTW9kZShtb2RlOiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51c2FnZU1vZGUgPT09IG1vZGU7XG4gIH1cblxuICBpc09uRmllbGRNb2RlKHZhbHVlPzogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzT25GaWVsZE1vZGUodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsKHNldHRpbmdzKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gdHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG5cbiAgICAgIC8vIEF2b2lkIHRvIG92ZXJyaWRlIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAgICBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUy5mb3JFYWNoKCh0cmFuc2llbnRLZXkpID0+IHtcbiAgICAgICAgZGVsZXRlIHJlc3RvcmVkRGF0YVt0cmFuc2llbnRLZXldO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lcmdlIGludG8gZXhpc3RpbmcgZGF0YVxuICAgICAgZGF0YSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgcmVzdG9yZWREYXRhKTtcblxuICAgICAgLy8gRml4IGtub3duIGF0dHJpYnV0ZVxuICAgICAgaWYgKGRhdGEucGFnZUhpc3RvcnkgJiYgIUFycmF5LmlzQXJyYXkoZGF0YS5wYWdlSGlzdG9yeSkpIGRhdGEucGFnZUhpc3RvcnkgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIGRhcmtNb2RlLCBpZiBub3Qgc2V0XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LmFsbG93RGFya01vZGUgIT09IHRydWUpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmRhcmtNb2RlO1xuICAgICAgZGVsZXRlIGRhdGEuYXV0b0RhcmtNb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwoZGF0YS5kYXJrTW9kZSkgfHwgZGF0YS5hdXRvRGFya01vZGUgIT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEF1dG8tZGV0ZWN0IHN5c3RlbSBkYXJrIG1vZGUuLi4nKTtcbiAgICAgIGRhdGEuZGFya01vZGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7XG4gICAgICBkYXRhLmF1dG9EYXJrTW9kZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMub25DaGFuZ2UubmV4dChkYXRhKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0UHJvcGVydHk8VCA9IHN0cmluZz4oa2V5T3JEZWY6IHN0cmluZyB8IEZvcm1GaWVsZERlZmluaXRpb24sIHZhbHVlOiBULCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBpbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIWtleU9yRGVmKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3NldHRpbmdzXSBTZXR0aW5nIHByb3BlcnR5ICR7a2V5T3JEZWZ9IHRvOmAsIHZhbHVlKTtcblxuICAgIHRoaXMuX2RhdGEucHJvcGVydGllcyA9IHRoaXMuX2RhdGEucHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdID0gaXNOaWwodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWUudG9TdHJpbmcoKTtcblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RvcmVMb2NhbGx5KG9wdHM/LmltbWVkaWF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvcGVydHkoa2V5T3JEZWY6IHN0cmluZyB8IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5KGtleU9yRGVmLmtleSwgaXNOb3ROaWwoZGVmYXVsdFZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IGtleU9yRGVmLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWRJZk51bGwoZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNCb29sZWFuKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgJiYgdmFsdWUgIT09ICdmYWxzZScgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzSW50KGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHBhcnNlSW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNOdW1iZXJzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocGFyc2VGbG9hdCkgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBbcGFyc2VGbG9hdCh2YWx1ZSldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc1N0cmluZ3MoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnLCcpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzT2JqZWN0cyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgLy8gUGFyc2UgYXJyYXlcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5KHNldHRpbmdzOiBQYXJ0aWFsPExvY2FsU2V0dGluZ3M+LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbjsgc2FuaXRpemU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgLy8gU2FuaXRpemUgKGtlZXAgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBzZXQgYnkgdXNlclxuICAgIGlmIChvcHRzPy5zYW5pdGl6ZSkge1xuICAgICAgc2V0dGluZ3MucHJvcGVydGllcyA9IEFwcFByb3BlcnRpZXNVdGlscy5zYW5pdGl6ZShzZXR0aW5ncy5wcm9wZXJ0aWVzLCB7IGRlZmluaXRpb25zOiB0aGlzLm9wdGlvbkRlZnMgfSk7XG4gICAgfVxuXG4gICAgaWYgKGVxdWFscyhzZXR0aW5ncywgdGhpcy5fZGF0YSkpIHJldHVybjsgLy8gU2tpcCBpZiBubyBjaGFuZ2VzXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBBcHBseWluZyBsb2NhbCBzZXR0aW5ncy4uLicsIHNldHRpbmdzKTtcblxuICAgIHRoaXMuX2RhdGEgPSB7Li4udGhpcy5fZGF0YSwgLi4uc2V0dGluZ3N9O1xuXG4gICAgLy8gU2F2ZSBsb2NhbGx5XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wZXJzaXN0SW1tZWRpYXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3JlTG9jYWxseSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZUxvY2FsbHkoKTsgLy8gTm8gQVdBSVRcbiAgICB9XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFwcGx5UHJvcGVydHkoa2V5OiBrZXlvZiBMb2NhbFNldHRpbmdzLCB2YWx1ZTogYW55LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHt9O1xuICAgIGNoYW5nZXNba2V5XSA9IHZhbHVlO1xuICAgIGF3YWl0IHRoaXMuYXBwbHkoY2hhbmdlcywgb3B0cyk7XG4gIH1cblxuICBnZXRQYWdlU2V0dGluZ3M8VCA9IGFueT4ocGFnZUlkOiBzdHJpbmcsIHByb3BlcnR5TmFtZT86IHN0cmluZyk6IFQge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wYWdlcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBrZXkgPSBwYWdlSWQucmVwbGFjZSgvWy9dL2csICdfXycpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsocHJvcGVydHlOYW1lKSkge1xuICAgICAgcmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKHRoaXMuX2RhdGEucGFnZXMsIGtleSArICcuJyArIHByb3BlcnR5TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRhLnBhZ2VzW2tleV07XG4gIH1cblxuICBhc3luYyBzYXZlUGFnZVNldHRpbmcocGFnZUlkOiBzdHJpbmcsIHZhbHVlOiBhbnksIHByb3BlcnR5TmFtZT86IHN0cmluZywgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5wYWdlcyA9IHRoaXMuX2RhdGEucGFnZXMgfHwge307XG5cbiAgICBjb25zdCBrZXkgPSBwYWdlSWQucmVwbGFjZSgvWy9dL2csICdfXycpO1xuICAgIGlmIChwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHRoaXMuX2RhdGEucGFnZXNba2V5XSB8fCB7fTtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnQgKGlmIG5vdCBza2lwcGVkKVxuICAgIGNvbnN0IGVtaXRFdmVudCA9IG9wdHM/LmVtaXRFdmVudCAhPT0gZmFsc2UgJiYgIXRoaXMuX3NraXBFbWl0UGFnZXNDaGFuZ2VzO1xuICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3MgLSBOTyBBV0FJVFxuICAgIHRoaXMuc3RvcmVMb2NhbGx5KCk7XG4gIH1cblxuICBnZXRPZmZsaW5lRmVhdHVyZTxGID0gYW55PihmZWF0dXJlTmFtZTogc3RyaW5nKTogT2ZmbGluZUZlYXR1cmU8Rj4ge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgaXNFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoIWZlYXR1cmVOYW1lKSB0aHJvdyBFcnJvcihcIk1pc3NpbmcgJ2ZlYXR1cmVOYW1lJyBhcmd1bWVudFwiKTtcblxuICAgIGZlYXR1cmVOYW1lID0gZmVhdHVyZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBmZWF0dXJlUHJlZml4ID0gZmVhdHVyZU5hbWUgKyAnIyc7XG4gICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmQoKGYpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ3N0cmluZycpIHJldHVybiBmLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChmZWF0dXJlUHJlZml4KTtcbiAgICAgIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiBmLm5hbWUpIHJldHVybiBmLm5hbWUgPT09IGZlYXR1cmVOYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmICghZmVhdHVyZSkgcmV0dXJuOyAvLyBOb3QgZm91bmRcbiAgICBpZiAodHlwZW9mIGZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBsYXN0U3luY0RhdGUgPSBmZWF0dXJlLnN1YnN0cmluZyhmZWF0dXJlUHJlZml4Lmxlbmd0aCk7XG4gICAgICBjb25zb2xlLmluZm8oYFske2ZlYXR1cmVOYW1lfV0gTGFzdCBzeW5jaHJvbml6YXRpb24gZGF0ZTogJHtsYXN0U3luY0RhdGV9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmZWF0dXJlTmFtZSxcbiAgICAgICAgbGFzdFN5bmNEYXRlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmU7XG4gIH1cblxuICBnZXRPZmZsaW5lRmVhdHVyZUxhc3RTeW5jRGF0ZShmZWF0dXJlTmFtZTogc3RyaW5nKTogTW9tZW50IHtcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG4gICAgcmV0dXJuIGZlYXR1cmUgJiYgZnJvbURhdGVJU09TdHJpbmcoZmVhdHVyZS5sYXN0U3luY0RhdGUpO1xuICB9XG5cbiAgaGFzT2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZmVhdHVyZU5hbWUpIHJldHVybiBpc05vdE5pbCh0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgaXNOb3RFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKTtcbiAgfVxuXG4gIHNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlOiBPZmZsaW5lRmVhdHVyZSkge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgW107XG5cbiAgICBmZWF0dXJlLm5hbWUgPSBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlLm5hbWUgKyAnIyc7XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmRJbmRleCgoZikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZS5uYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXNbZXhpc3RpbmdJbmRleF0gPSBmZWF0dXJlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5ncyAtIE5PIEFXQUlUXG4gICAgdGhpcy5zdG9yZUxvY2FsbHkoKTtcbiAgfVxuXG4gIG1hcmtPZmZsaW5lRmVhdHVyZUFzU3luYyhmZWF0dXJlTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcblxuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgZmVhdHVyZSA9IDxPZmZsaW5lRmVhdHVyZT57XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxhc3RTeW5jRGF0ZTogRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBmZWF0dXJlLmxhc3RTeW5jRGF0ZSA9IERhdGVVdGlscy5tb21lbnQoKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmUpO1xuICB9XG5cbiAgcmVtb3ZlT2ZmbGluZUZlYXR1cmVzKCkge1xuICAgIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyA9IFtdO1xuXG4gICAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3MgLSBOTyBBV0FJVFxuICAgICAgdGhpcy5zdG9yZUxvY2FsbHkoKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGZpZWxkTmFtZTogc3RyaW5nLCBkZWZhdWx0QXR0cmlidXRlcz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2BzdW1hcmlzLmZpZWxkLiR7ZmllbGROYW1lfS5hdHRyaWJ1dGVzYF07XG4gICAgLy8gTm90aGluZyBmb3VuZCBpbiBzZXR0aW5nczogcmV0dXJuIGRlZmF1bHRzXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVzIHx8IFsnbGFiZWwnLCAnbmFtZSddO1xuXG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJyk7XG4gIH1cblxuICBnZXRQYWdlRmllbGREZWZhdWx0VmFsdWUocGFnZUlkOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlU2V0dGluZ3MocGFnZUlkLCBgZmllbGQuJHtmaWVsZE5hbWV9LmRlZmF1bHRWYWx1ZWApO1xuICB9XG5cbiAgZ2V0IG9wdGlvbkRlZnMoKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRGVmcztcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9uKGRlZjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgb3B0cz86IHsgcmVwbGFjZUlmRXhpc3RzPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vcHRpb25EZWZzLmZpbmRJbmRleCgoZikgPT4gZi5rZXkgPT09IGRlZi5rZXkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChvcHRzPy5yZXBsYWNlSWZFeGlzdHMgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIHByb3BlcnR5IHske2RlZi5rZXl9fSBhbHJlYWR5IGRlZmluZS5gKTtcbiAgICAgIH1cbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmdcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3NldHRpbmdzXSBVcGRhdGluZyBhZGRpdGlvbmFsIHByb3BlcnR5IHske2RlZi5rZXl9fWAsIGRlZik7XG4gICAgICB0aGlzLl9vcHRpb25EZWZzW2luZGV4XSA9IGRlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbc2V0dGluZ3NdIEFkZGluZyBhZGRpdGlvbmFsIHByb3BlcnR5IHske2RlZi5rZXl9fWAsIGRlZik7XG4gICAgICB0aGlzLl9vcHRpb25EZWZzLnB1c2goZGVmKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbnMoZGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdKSB7XG4gICAgKGRlZnMgfHwgW10pLmZvckVhY2goKGRlZikgPT4gdGhpcy5yZWdpc3Rlck9wdGlvbihkZWYpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkoXG4gICAgcGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLFxuICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlblxuICApIHtcbiAgICAvLyBJZiBub3QgaW5zaWRlIHJlY3Vyc2l2ZSBjYWxsOiBmaWxsIHBhZ2UgaGlzdG9yeSBkZWZhdWx0c1xuICAgIGlmICghcGFnZUhpc3RvcnkpIHRoaXMuZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZSwgb3B0cyk7XG5cbiAgICAvLyBXb3JrYXJvdW5kIHRvIGZpeCBlcnJvciBpbiBjb25zb2xlLCBiZWNhdXNlIHBhZ2VIaXN0b3J5IGlzIG5vdCBhbiBhcnJheSAoc2VlbXMgdG8gb2NjdXIgYWZ0ZXIgYSBwZWVyIGNoYW5nZWQpXG4gICAgaWYgKCFwYWdlSGlzdG9yeSAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSkge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSA9IFtdO1xuICAgIH1cblxuICAgIHBhZ2VIaXN0b3J5ID0gQXJyYXkuaXNBcnJheShwYWdlSGlzdG9yeSkgPyBwYWdlSGlzdG9yeSA6IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChcbiAgICAgIChwKSA9PlxuICAgICAgICAvLyBzYW1lIHBhdGhcbiAgICAgICAgcC5wYXRoID09PSBwYWdlLnBhdGggfHxcbiAgICAgICAgLy8gb3Igc3ViLXBhdGhcbiAgICAgICAgcGFnZS5wYXRoLnN0YXJ0c1dpdGgocC5wYXRoICsgJy8nKVxuICAgICk7XG5cbiAgICAvLyBOZXcgcGFnZTogaW5zZXJ0IGl0XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEFkZGluZyBwYWdlIHRvIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhpc3RpbmdQYWdlID0gcGFnZUhpc3RvcnlbaW5kZXhdO1xuXG4gICAgICAvLyBTYW1lIHBhdGg6IHJlcGxhY2UgZXhpc3RpbmcgcGFnZVxuICAgICAgaWYgKHBhZ2VIaXN0b3J5W2luZGV4XS5wYXRoID09PSBwYWdlLnBhdGgpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9pZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gVXBkYXRpbmcgZXhpc3RpbmcgcGFnZSBpbiBoaXN0b3J5OiAnLCBwYWdlKTtcblxuICAgICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIENvcHkgZXhpdGluZyBjaGlsZHJlblxuICAgICAgICBwYWdlLmNoaWxkcmVuID0gZXhpc3RpbmdQYWdlLmNoaWxkcmVuIHx8IFtdO1xuXG4gICAgICAgIC8vIFByZXBlbmQgdG8gbGlzdFxuICAgICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoMCwgMCwgcGFnZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBzYW1lIHBhdGggKHNob3VsZCBiZSBhIHBhcmVudCBwYWdlKVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBwYXJlbnQncyBjaGlsZHJlbiBhcnJheSwgaWYgbm90IGV4aXN0c1xuICAgICAgICBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBwYXJlbnQgdGltZVxuICAgICAgICBleGlzdGluZ1BhZ2UudGltZSA9IHBhZ2UudGltZTtcblxuICAgICAgICAvLyBBZGQgcGFnZSBhcyBwYXJlbnQncyBjaGlsZHJlbiAocmVjdXJzaXZlIGNhbGwpXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCBvcHRzLCBleGlzdGluZ1BhZ2UuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNhdmUgbG9jYWxseSAob25seSBpZiBub3QgYSByZWN1cnNpdmUgZXhlY3V0aW9uKVxuICAgIGlmIChwYWdlSGlzdG9yeSA9PT0gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSkge1xuICAgICAgLy8gSWYgbWF4IGhhcyBiZWVuIHJlYWNoZWQsIHJlbW92ZSBvbGQgcGFnZXNcbiAgICAgIGlmIChwYWdlSGlzdG9yeS5sZW5ndGggPiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFnZXMgPSBwYWdlSGlzdG9yeS5zcGxpY2UodGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUsIHBhZ2VIaXN0b3J5Lmxlbmd0aCAtIHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgLy9pZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUGFnZXMgcmVtb3ZlZCBmcm9tIGhpc3Rvcnk6ICcsIHJlbW92ZWRQYWdlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IG5ldyB2YWx1ZVxuICAgICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIHBhZ2VIaXN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVQYWdlSGlzdG9yeShcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSxcbiAgICBwYWdlSGlzdG9yeTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSA9IHVuZGVmaW5lZCwgLy8gdXNlZCBmb3IgcmVjdXJzaXZlIGNhbGwgdG8gY2hpbGRyZW4pXG4gICAgZGVwdGggPSAwXG4gICkge1xuICAgIGNvbnN0IHJvb3QgPSBkZXB0aCA9PT0gMDtcbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk/LnNsaWNlKCkgLypjbG9uZSwgdG8gZm9yY2UgYXBwbHkgdG8gc2F2ZSAqLyB8fCBbXTtcblxuICAgIGNvbnN0IGluZGV4ID0gcGFnZUhpc3RvcnkuZmluZEluZGV4KChwKSA9PiBwLnBhdGggPT09IHBhdGgpO1xuICAgIGxldCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZlIHBhZ2UgaGlzdG9yeTogJywgcGF0aCk7XG5cbiAgICAgIC8vIFJlbW92ZSB2YWx1ZVxuICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIHBhdGggb24gY2hpbGRyZW4gKHN0b3Agd2hlbiBmb3VuZClcbiAgICAgIGZvdW5kID1cbiAgICAgICAgcGFnZUhpc3RvcnlcbiAgICAgICAgICAubWFwKChwKSA9PiBwLmNoaWxkcmVuKVxuICAgICAgICAgIC5maWx0ZXIoaXNOb3RFbXB0eUFycmF5KVxuICAgICAgICAgIC5maW5kSW5kZXgoKGNoaWxkcmVuKSA9PiB0aGlzLnJlbW92ZVBhZ2VIaXN0b3J5KHBhdGgsIG9wdHMsIGNoaWxkcmVuLCAoZGVwdGggfHwgMCkgKyAxKSkgIT09IC0xO1xuICAgIH1cblxuICAgIC8vIFNhdmUgbG9jYWxseSAob25seSBpZiByb290IGxldmVsKVxuICAgIGlmIChmb3VuZCAmJiByb290KSB7XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyUGFnZUhpc3RvcnkoKSB7XG4gICAgLy8gUmVzZXQgYWxsIHBhZ2UgaGlzdG9yeVxuICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCBbXSwgeyBwZXJzaXN0SW1tZWRpYXRlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXNldERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuX2RhdGEgPSB7IC4uLnRoaXMuX2RhdGEsIC4uLnRoaXMuZGVmYXVsdFNldHRpbmdzIH07XG5cbiAgICB0aGlzLl9kYXRhLmxvY2FsZSA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nIHx8IHRoaXMuX2RhdGEubG9jYWxlO1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RhdGEudXNhZ2VNb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgPSBbXTtcbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXMgPSB7fTtcblxuICAgIGNvbnN0IGRlZmF1bHRQZWVyID0gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlciAmJiBQZWVyLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcik7XG4gICAgdGhpcy5fZGF0YS5wZWVyVXJsID0gKGRlZmF1bHRQZWVyICYmIGRlZmF1bHRQZWVyLnVybCkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMuc3RhcnRlZCkgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdG9yZUxvY2FsbHkoaW1tZWRpYXRlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gRXhlY3V0ZSBpbW1lZGlhdGVcbiAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgICAgLy8gSU5GT1xuICAgICAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gUmVtb3ZpbmcgbG9jYWwgc2V0dGluZ3MgZnJvbSBzdG9yYWdlJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJTkZPXG4gICAgICAgICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFN0b3JlIGxvY2FsIHNldHRpbmdzJywgdGhpcy5fZGF0YSk7XG4gICAgICAgICAgaWYgKHRoaXMuX3NlcmlhbGl6ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgICAvLyBGaXggc2VyaWFsaXphdGlvbiBlcnJvciwgaW4gU3VtYXJpcy1BcHBcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZLCB0aGlzLl9kYXRhKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aGlzLm9uU3RvcmVkTG9jYWxseS5lbWl0KHRoaXMuX2RhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl8kc3RvcmVMb2NhbGx5RXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKFxuICAgIHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLFxuICAgIG9wdHM/OiB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM/OiBib29sZWFuO1xuICAgICAgcmVtb3ZlVGl0bGVTbWFsbFRhZz86IGJvb2xlYW47XG4gICAgfVxuICApOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSB7XG4gICAgaWYgKCFwYWdlIHx8ICFwYWdlLnRpdGxlIHx8ICFwYWdlLnBhdGgpIHRocm93IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCAncGFnZScsICdwYWdlLnBhdGgnIG9yICdwYWdlLnRpdGxlJ1wiKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IERhdGVVdGlscy5tb21lbnQoKTtcblxuICAgIC8vIENsZWFuIHRpdGxlXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMucmVtb3ZlVGl0bGVTbWFsbFRhZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFJlbW92ZSA8c21hbGw+IEhUTUwgdGFnc1xuICAgICAgY29uc3Qgc21hbGxUYWdJbmRleCA9IHBhZ2UudGl0bGUuaW5kZXhPZignPC9zbWFsbD4nKTtcbiAgICAgIGlmIChzbWFsbFRhZ0luZGV4ICE9PSAtMSkge1xuICAgICAgICBwYWdlLnRpdGxlID0gcGFnZS50aXRsZS5zdWJzdHJpbmcoc21hbGxUYWdJbmRleCArICc8L3NtYWxsPicubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlXG4gICAgICAgIC8vIFJlbW92ZSBjbGFzcz1cIi4uLlwiIEhUTUwgYXR0cmlidXRlXG4gICAgICAgIC5yZXBsYWNlKC9cXHMqY2xhc3M9WydcIl1bXidcIl0rWydcIl0nL2csICcnKVxuICAgICAgICAvLyB0cmltXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHF1ZXJ5IHBhcmFtc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVBhdGhRdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgIHBhZ2UucGF0aCA9IFVybFV0aWxzLnN0cmlwUXVlcnkocGFnZS5wYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZTtcbiAgfVxufVxuIl19