@sumaris-net/ngx-components 18.2.35-alpha2 → 18.2.35-alpha3

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.
@@ -5,7 +5,7 @@ import { TranslateService } from '@ngx-translate/core';
5
5
  import { BehaviorSubject, of } from 'rxjs';
6
6
  import { isMoment } from 'moment';
7
7
  import { LocalSettingsService } from '../../services/local-settings.service';
8
- import { debounceTime, filter, mapTo, mergeMap } from 'rxjs/operators';
8
+ import { debounceTime, filter, map, mergeMap } from 'rxjs/operators';
9
9
  import { AppTabEditor, AppTabEditorOptions } from './tab-editor.class';
10
10
  import { AppFormUtils } from '../form.utils';
11
11
  import { Alerts } from '../../../shared/alerts';
@@ -227,7 +227,7 @@ export class AppEntityEditor extends AppTabEditor {
227
227
  })
228
228
  ?.pipe(filter(isNotNil), mergeMap((data) => this.saving
229
229
  ? // If saving, wait end, to avoid to detect self changes
230
- firstFalse(this.savingSubject).pipe(mapTo(data), debounceTime(500))
230
+ firstFalse(this.savingSubject).pipe(map(() => data), debounceTime(500))
231
231
  : of(data)))
232
232
  .subscribe((data) => {
233
233
  const isNewer = isMoment(data.updateDate) && (!this.data.updateDate || data.updateDate.isAfter(this.data.updateDate));
@@ -662,6 +662,9 @@ export class AppEntityEditor extends AppTabEditor {
662
662
  * @protected
663
663
  */
664
664
  async updateRoute(data, queryParams) {
665
+ data = data || this.data;
666
+ if (!data || !this.route)
667
+ return false;
665
668
  const currId = this.route.snapshot.paramMap.get(this.pathIdAttribute);
666
669
  const futureId = isNotNil(data.id) ? data.id.toString() : 'new';
667
670
  this.queryParams = {
@@ -672,7 +675,7 @@ export class AppEntityEditor extends AppTabEditor {
672
675
  // Update queryParam only (not the path)
673
676
  if (!equals(this.route.snapshot.queryParams, this.queryParams)) {
674
677
  if (this.debug)
675
- console.debug('[entity-editor] Updating route using queryParams: ', queryParams);
678
+ console.debug(`${this._logPrefix}Updating route using queryParams: `, queryParams);
676
679
  return await this.router.navigate(['.'], {
677
680
  relativeTo: this.route,
678
681
  replaceUrl: false,
@@ -685,7 +688,7 @@ export class AppEntityEditor extends AppTabEditor {
685
688
  // Current route was '/new' => change to '/new?id=:id' (to allow CustomReuseStrategy to detect that route can be reused)
686
689
  if (currId === 'new') {
687
690
  if (this.debug)
688
- console.debug('[entity-editor] Updating route /new into /:id, using queryParams: ', queryParams);
691
+ console.debug(`${this._logPrefix}Updating route /new into /:id, using queryParams: `, queryParams);
689
692
  const res = await this.router.navigate(['.'], {
690
693
  relativeTo: this.route,
691
694
  replaceUrl: true,
@@ -702,7 +705,7 @@ export class AppEntityEditor extends AppTabEditor {
702
705
  const commands = path && typeof path === 'string' ? path.split('/').slice(1) : path;
703
706
  if (isNotEmptyArray(commands)) {
704
707
  if (this.debug)
705
- console.debug('[entity-editor] Updating route to: ' + path);
708
+ console.debug(`${this._logPrefix}Updating route to: ` + path);
706
709
  return await this.router.navigate(commands, {
707
710
  replaceUrl: true,
708
711
  queryParams: this.queryParams,
@@ -731,4 +734,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
731
734
  }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined }, { type: undefined }, { type: AppEditorOptions, decorators: [{
732
735
  type: Optional
733
736
  }] }] });
734
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS9lbnRpdHktZWRpdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBK0IsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUF5QixNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBMkIsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQXVCLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFl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RSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7aUJBQzNCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELDZCQUE2QjtJQUU3Qjs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGVBQWUsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssZUFBZSxFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7d0dBaHpCbUIsZUFBZTs0RkFBZixlQUFlOzs0RkFBZixlQUFlO2tCQUZwQyxTQUFTOzswQkFtRkwsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIElvblJvdXRlck91dGxldCwgTmF2Q29udHJvbGxlciwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLCBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcFRvLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBVc2FnZU1vZGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBcHBUYWJFZGl0b3IsIEFwcFRhYkVkaXRvck9wdGlvbnMsIElBcHBUYWJFZGl0b3IgfSBmcm9tICcuL3RhYi1lZGl0b3IuY2xhc3MnO1xuaW1wb3J0IHsgQXBwRm9ybVV0aWxzIH0gZnJvbSAnLi4vZm9ybS51dGlscyc7XG5pbXBvcnQgeyBBbGVydHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYWxlcnRzJztcbmltcG9ydCB7IEFwcEVycm9yV2l0aERldGFpbHMsIEVycm9yQ29kZXMsIFNlcnZlckVycm9yQ29kZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHsgZXF1YWxzLCBpc0ludCwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW4sIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IERhdGVGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3BpcGVzL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IEhpc3RvcnlQYWdlUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kZWwvaGlzdG9yeS5tb2RlbCc7XG5pbXBvcnQgeyBmaXJzdEZhbHNlLCB3YWl0Rm9yRmFsc2UsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IEZvcm1FcnJvclRyYW5zbGF0b3IgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBpc1N0YXJ0YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBFbnRpdHlFZGl0b3I8VD4gZXh0ZW5kcyBJQXBwVGFiRWRpdG9yPFQ+IHtcbiAgdXNhZ2VNb2RlOiBVc2FnZU1vZGU7XG4gIGlzTmV3RGF0YTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcEVkaXRvck9wdGlvbnMgZXh0ZW5kcyBBcHBUYWJFZGl0b3JPcHRpb25zIHtcbiAgYXV0b0xvYWQ/OiBib29sZWFuO1xuICBhdXRvTG9hZERlbGF5PzogbnVtYmVyO1xuICBwYXRoSWRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGVuYWJsZUxpc3RlbkNoYW5nZXM/OiBib29sZWFuO1xuICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hhbmdlIHBhZ2Ugcm91dGUgKHdpbmRvdyBVUkwpIHdoZW4gc2F2aW5nIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgYXV0b1VwZGF0ZVJvdXRlPzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byB0cnVlXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIG5leHQgdGFiLCBhZnRlciBzYXZpbmcgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBhdXRvT3Blbk5leHRUYWI/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIHRydWVcblxuICBpMThuUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBFbnRpdHlFZGl0b3I8XG4gICAgVCBleHRlbmRzIEVudGl0eTxULCBJRD4sXG4gICAgUyBleHRlbmRzIElFbnRpdHlTZXJ2aWNlPFQsIElEPiA9IElFbnRpdHlTZXJ2aWNlPFQsIGFueT4sXG4gICAgSUQgPSBudW1iZXIsXG4gICAgTE8gZXh0ZW5kcyBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgPSBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsXG4gID5cbiAgZXh0ZW5kcyBBcHBUYWJFZGl0b3I8VCwgSUQsIExPPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBJQXBwRW50aXR5RWRpdG9yPFQ+XG57XG4gIGRhdGE6IFQ7XG4gIHByZXZpb3VzRGF0YUlkOiBJRDtcblxuICBkZWZhdWx0QmFja0hyZWY6IHN0cmluZztcbiAgaGlzdG9yeUljb246IHsgaWNvbj86IHN0cmluZzsgbWF0SWNvbj86IHN0cmluZyB9O1xuXG4gIHJlYWRvbmx5IHRpdGxlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICByZWFkb25seSBvblVwZGF0ZVZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgLyoqXG4gICAqICBAZGVwcmVjYXRlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCAkdGl0bGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy50aXRsZVN1YmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0ZUZvcm1hdDogRGF0ZUZvcm1hdFNlcnZpY2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXJPdXRsZXQ6IElvblJvdXRlck91dGxldDtcbiAgcHJvdGVjdGVkIGVycm9yVHJhbnNsYXRvcjogRm9ybUVycm9yVHJhbnNsYXRvcjtcblxuICBwcml2YXRlIF91c2FnZU1vZGU6IFVzYWdlTW9kZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5hYmxlTGlzdGVuQ2hhbmdlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGF0aElkQXR0cmlidXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9Mb2FkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvTG9hZERlbGF5OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9VcGRhdGVSb3V0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYXV0b09wZW5OZXh0VGFiOiBib29sZWFuO1xuICBwcml2YXRlIF9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiB0aGlzLl91c2FnZU1vZGU7XG4gIH1cblxuICBzZXQgdXNhZ2VNb2RlKHZhbHVlOiBVc2FnZU1vZGUpIHtcbiAgICBpZiAodGhpcy5fdXNhZ2VNb2RlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdmFsdWU7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc09uRmllbGRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzT25GaWVsZE1vZGUodGhpcy5fdXNhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCBpc05ld0RhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuZGF0YT8uaWQpO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2UoKTogUyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2U7XG4gIH1cblxuICBnZXQgYXV0b09wZW5OZXh0VGFiKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hdXRvT3Blbk5leHRUYWI7XG4gIH1cblxuICBzZXQgYXV0b09wZW5OZXh0VGFiKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b09wZW5OZXh0VGFiID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHBhdGhJZEF0dHJpYnV0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wYXRoSWRBdHRyaWJ1dGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBkYXRhVHlwZTogbmV3ICgpID0+IFQsXG4gICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlPzogUyxcbiAgICBAT3B0aW9uYWwoKSBvcHRpb25zPzogQXBwRWRpdG9yT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSksXG4gICAgICBpbmplY3Rvci5nZXQoUm91dGVyKSxcbiAgICAgIGluamVjdG9yLmdldChOYXZDb250cm9sbGVyKSxcbiAgICAgIGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGluamVjdG9yLmdldChFTlZJUk9OTUVOVCk7XG4gICAgb3B0aW9ucyA9IDxBcHBFZGl0b3JPcHRpb25zPntcbiAgICAgIC8vIERlZmF1bHQgb3B0aW9uc1xuICAgICAgZW5hYmxlTGlzdGVuQ2hhbmdlczogdGhpcy5lbnZpcm9ubWVudC5lbnRpdHlFZGl0b3I/LmVuYWJsZUxpc3RlbkNoYW5nZXMgfHwgZmFsc2UsIC8vIEZhbHNlICBieSBkZWZhdWx0XG4gICAgICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kczogdG9OdW1iZXIodGhpcy5lbnZpcm9ubWVudC5lbnRpdHlFZGl0b3I/Lmxpc3RlbkludGVydmFsSW5TZWNvbmRzLCAwKSwgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuICAgICAgcGF0aElkQXR0cmlidXRlOiAnaWQnLFxuICAgICAgYXV0b0xvYWQ6IHRydWUsXG4gICAgICBhdXRvVXBkYXRlUm91dGU6IHRydWUsXG4gICAgICBpMThuUHJlZml4OiAnJyxcblxuICAgICAgLy8gRm9sbG93aW5nIG9wdGlvbnMgYXJlIG92ZXJyaWRlIGluc2lkZSBuZ09uSW5pdCgpXG4gICAgICAvLyBhdXRvT3Blbk5leHRUYWI6IC4uLixcblxuICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdHNcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIHRoaXMuY2QgPSBpbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBpbmplY3Rvci5nZXQoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICAgIHRoaXMuZXJyb3JUcmFuc2xhdG9yID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMucm91dGVyT3V0bGV0ID0gaW5qZWN0b3IuZ2V0KElvblJvdXRlck91dGxldCk7XG4gICAgdGhpcy5kYXRlRm9ybWF0ID0gaW5qZWN0b3IuZ2V0KERhdGVGb3JtYXRTZXJ2aWNlKTtcbiAgICB0aGlzLnRvYXN0Q29udHJvbGxlciA9IGluamVjdG9yLmdldChUb2FzdENvbnRyb2xsZXIpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSBvcHRpb25zLmVuYWJsZUxpc3RlbkNoYW5nZXM7XG4gICAgdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHMgPSBvcHRpb25zLmxpc3RlbkludGVydmFsSW5TZWNvbmRzO1xuICAgIHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSA9IG9wdGlvbnMucGF0aElkQXR0cmlidXRlO1xuICAgIHRoaXMuX2F1dG9Mb2FkID0gb3B0aW9ucy5hdXRvTG9hZDtcbiAgICB0aGlzLl9hdXRvTG9hZERlbGF5ID0gb3B0aW9ucy5hdXRvTG9hZERlbGF5O1xuICAgIHRoaXMuX2F1dG9VcGRhdGVSb3V0ZSA9IG9wdGlvbnMuYXV0b1VwZGF0ZVJvdXRlO1xuICAgIHRoaXMuX2F1dG9PcGVuTmV4dFRhYiA9IG9wdGlvbnMuYXV0b09wZW5OZXh0VGFiO1xuICAgIHRoaXMuaTE4bkNvbnRleHQgPSB7XG4gICAgICBwcmVmaXg6IG9wdGlvbnMuaTE4blByZWZpeCxcbiAgICAgIHN1ZmZpeDogJycsXG4gICAgfTtcblxuICAgIC8vIEZPUiBERVYgT05MWSAtLS0tXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgdGhpcy5fbG9nUHJlZml4ID0gJ1tlbnRpdHktZWRpdG9yXSAnO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIERlZmF1bHRzXG4gICAgdGhpcy5fYXV0b09wZW5OZXh0VGFiID0gdG9Cb29sZWFuKHRoaXMuX2F1dG9PcGVuTmV4dFRhYiwgIXRoaXMuaXNPbkZpZWxkTW9kZSk7XG4gICAgdGhpcy5oaXN0b3J5SWNvbiA9IHRoaXMuaGlzdG9yeUljb24gfHwgeyBpY29uOiAnbGlzdCcgfTtcblxuICAgIC8vIFJlZ2lzdGVyIGZvcm1zXG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG5cbiAgICAvLyBEaXNhYmxlIHBhZ2UsIGR1cmluZyBsb2FkXG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAvLyBMb2FkIGRhdGFcbiAgICBpZiAodGhpcy5fYXV0b0xvYWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkRnJvbVJvdXRlKCksIHRoaXMuX2F1dG9Mb2FkRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy50aXRsZVN1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLnRpdGxlU3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25VcGRhdGVWaWV3LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblVwZGF0ZVZpZXcudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFdhaXQgZW5kIG9mIHNhdmluZ1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuIHdhaXRGb3JGYWxzZSh0aGlzLnNhdmluZ1N1YmplY3QsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KTtcblxuICAgIHJldHVybiBzdXBlci53YWl0SWRsZShvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSBpZCwgdXNpbmcgdGhlIGRhdGFTZXJ2aWNlXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgbG9hZChcbiAgICBpZD86IElELFxuICAgIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgJiB7XG4gICAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgICAgb3BlblRhYkluZGV4PzogbnVtYmVyO1xuICAgICAgdXBkYXRlUm91dGU/OiBib29sZWFuO1xuICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH1cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbG9hZCBkYXRhOiBtaXNzaW5nICdkYXRhU2VydmljZSchXCIpO1xuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBOZXcgZGF0YVxuICAgIGlmIChpc05pbChpZCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENyZWF0ZSB1c2luZyBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdGhpcy5jb21wdXRlVXNhZ2VNb2RlKGRhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uTmV3RW50aXR5KGRhdGEsIG9wdHMpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcoZGF0YSwge1xuICAgICAgICAgIG9wZW5UYWJJbmRleDogMCxcbiAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVyciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQoaWQsIG9wdHMpO1xuICAgICAgICBpZiAoIWRhdGEpIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5EQVRBX05PVF9GT1VORF9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkRBVEFfTk9fRk9VTkQnIH07XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eUxvYWRlZChkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIG9wdHMpO1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuQ2hhbmdlcygpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuVXNlcldyaXRlKGRhdGE6IFQsIG9wdHM/OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5jYW5Vc2VyV3JpdGUoZGF0YSwgb3B0cyk7XG4gIH1cblxuICBzdGFydExpc3RlbkNoYW5nZXMoKSB7XG4gICAgLy8gU2tpcCBpZiBkaXNhYmxlZCwgb3IgYWxyZWFkeSBsaXN0ZW5pbmdcbiAgICBpZiAodGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiB8fCAhdGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgcmV0dXJuO1xuICAgIC8vIFNraXAgaWYgbmV3IChub3RoaW5nIHRvIGxpc3RlbilcbiAgICBpZiAodGhpcy5pc05ld0RhdGEpIHJldHVybjtcblxuICAgIC8vIExpc3RlbiBmb3IgY2hhbmdlcyBvbiBzZXJ2ZXJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbkNoYW5nZXModGhpcy5kYXRhLmlkLCB7XG4gICAgICBpbnRlcnZhbDogdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHMsXG4gICAgfSlcbiAgICAgID8ucGlwZShcbiAgICAgICAgZmlsdGVyKGlzTm90TmlsKSxcbiAgICAgICAgbWVyZ2VNYXAoKGRhdGEpID0+XG4gICAgICAgICAgdGhpcy5zYXZpbmdcbiAgICAgICAgICAgID8gLy8gSWYgc2F2aW5nLCB3YWl0IGVuZCwgdG8gYXZvaWQgdG8gZGV0ZWN0IHNlbGYgY2hhbmdlc1xuICAgICAgICAgICAgICBmaXJzdEZhbHNlKHRoaXMuc2F2aW5nU3ViamVjdCkucGlwZShtYXBUbyhkYXRhKSwgZGVib3VuY2VUaW1lKDUwMCkpXG4gICAgICAgICAgICA6IG9mKGRhdGEpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFQpID0+IHtcbiAgICAgICAgY29uc3QgaXNOZXdlciA9IGlzTW9tZW50KGRhdGEudXBkYXRlRGF0ZSkgJiYgKCF0aGlzLmRhdGEudXBkYXRlRGF0ZSB8fCBkYXRhLnVwZGF0ZURhdGUuaXNBZnRlcih0aGlzLmRhdGEudXBkYXRlRGF0ZSkpO1xuICAgICAgICBpZiAoIWlzTmV3ZXIpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgICAgIC8vIEVkaXRvciBoYXMgbm8gY2hhbmdlczogcmVsb2FkXG4gICAgICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fTogcmVsb2FkaW5nIHBhZ2UuLi5gKTtcbiAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENhbm5vdCByZWxvYWQ6IGFsZXJ0IHRoZSB1c2VyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fSwgYnV0IHBhZ2UgaXMgZGlydHk6IHNraXAgcmVsb2FkaW5nLmApO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZTogJ0VSUk9SLkRBVEFfVVBEQVRFX0RBVEVfQ0hBTkdFRCcsIHR5cGU6ICd3YXJuaW5nJywgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmlwdGlvblxuICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pO1xuICAgICAgc3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICAgIHRoaXMudW5yZWdpc3RlclN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BMaXN0ZW5DaGFuZ2VzKCkge1xuICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhc3luYyByZWFkeShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5yZWFkeShvcHRzKTtcblxuICAgIC8vIFdhaXQgc2VydmljZSB0byBiZSByZWFkeVxuICAgIGlmIChpc1N0YXJ0YWJsZVNlcnZpY2UodGhpcy5kYXRhU2VydmljZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UucmVhZHkoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVWaWV3KFxuICAgIGRhdGE6IFQgfCBudWxsLFxuICAgIG9wdHM/OiB7XG4gICAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgICAgb3BlblRhYkluZGV4PzogbnVtYmVyO1xuICAgICAgdXBkYXRlUm91dGU/OiBib29sZWFuO1xuICAgIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWRDaGFuZ2VkID1cbiAgICAgIGlzTm90TmlsKGRhdGEuaWQpICYmXG4gICAgICB0aGlzLnByZXZpb3VzRGF0YUlkICE9PSB1bmRlZmluZWQgJiYgLy8gSWdub3JlIGlmIGZpcnN0IGxvYWRpbmcgKD11bmRlZmluZWQpXG4gICAgICB0aGlzLnByZXZpb3VzRGF0YUlkICE9PSBkYXRhLmlkO1xuXG4gICAgb3B0cyA9IHtcbiAgICAgIHVwZGF0ZVJvdXRlOiB0aGlzLl9hdXRvVXBkYXRlUm91dGUgJiYgaWRDaGFuZ2VkICYmICF0aGlzLmxvYWRpbmcsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucHJldmlvdXNEYXRhSWQgPSBkYXRhLmlkIHx8IG51bGw7XG5cbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgYXdhaXQgdGhpcy5zZXRWYWx1ZShkYXRhKTtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdTdGF0ZShkYXRhKTtcblxuICAgICAgLy8gTmVlZCB0byB1cGRhdGUgcm91dGVcbiAgICAgIGlmIChvcHRzLnVwZGF0ZVJvdXRlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFiQW5kUm91dGUoZGF0YSwgb3B0cylcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpdGxlIC0gc2hvdWxkIGJlIGV4ZWN1dGVkIEFGVEVSIHVwZGF0ZVJvdXRlIGJlY2F1c2Ugb2YgcGF0aCBjaGFuZ2UgLSBmaXggIzE4NVxuICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMudXBkYXRlVGl0bGUoZGF0YSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBuZXh0IHRhYlxuICAgICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KG9wdHMub3BlblRhYkluZGV4KTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHRpdGxlLlxuICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9uVXBkYXRlVmlldy5lbWl0KGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzdGF0ZVxuICAgKi9cbiAgdXBkYXRlVmlld1N0YXRlKGRhdGE6IFQsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuaXNOZXdEYXRhIHx8IHRoaXMuY2FuVXNlcldyaXRlKGRhdGEpKSB7XG4gICAgICB0aGlzLmVuYWJsZShvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlKG9wdHMpO1xuXG4gICAgICAvLyBBbGxvdyB0byBzb3J0IHRhYmxlc1xuICAgICAgdGhpcy50YWJsZXM/LmZvckVhY2goKHQpID0+IHQuZW5hYmxlU29ydCgpKTtcbiAgICAgIHRoaXMuYXN5bmNUYWJsZXM/LmZvckVhY2goKHQpID0+IHQuZW5hYmxlU29ydCgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICBhc3luYyB1cGRhdGVUYWJBbmRSb3V0ZShcbiAgICBkYXRhOiBULFxuICAgIG9wdHM/OiB7XG4gICAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgLi4udGhpcy5xdWVyeVBhcmFtcyB9O1xuXG4gICAgLy8gT3BlbiB0aGUgbmV4dCB0YWJcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KG9wdHMgJiYgb3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgaWYgKCF0aGlzLnF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWUgfHwgIXRoaXMucm91dGUpIHJldHVybjsgLy8gU2tpcCByb3V0ZSB1cGRhdGVcblxuICAgIC8vIFVwZGF0ZSByb3V0ZSBsb2NhdGlvblxuICAgIHF1ZXJ5UGFyYW1zW3RoaXMucXVlcnlUYWJJbmRleFBhcmFtTmFtZV0gPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXggIT09IDAgPyB0aGlzLnNlbGVjdGVkVGFiSW5kZXggOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVSb3V0ZShkYXRhLCBxdWVyeVBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICB1cGRhdGVUYWJJbmRleCh0YWJJbmRleD86IG51bWJlcikge1xuICAgIGlmIChpc05vdE5pbCh0YWJJbmRleCkgJiYgdGFiSW5kZXggPj0gMCAmJiB0YWJJbmRleCAhPT0gdGhpcy5zZWxlY3RlZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0YWJJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZUFuZENsb3NlKGV2ZW50OiBFdmVudCwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKGV2ZW50KTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc2F2ZWQ7XG4gIH1cblxuICBhc3luYyBjbG9zZShldmVudDogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIGVkaXRvciwgYnkgY2FsbGluZyB0aGUgZGF0YVNlcnZpY2Uuc2F2ZSgpLlxuICAgKiBFbnN1cmUgdGhhdCBlZGl0b3IgaWYgdmFsaWQuIElmIG5vdCwgZGlzcGxheSBhbiBlcnJvclxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIHNhdmUoZXZlbnQ/OiBFdmVudCwgb3B0cz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5zYXZpbmcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2tpcCBzYXZlOiBlZGl0b3IgaXMgYnVzeSAobG9hZGluZyBvciBzYXZpbmcpJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5kaXJ0eSAmJiAhdGhpcy5pc05ld0RhdGEpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2tpcCBzYXZlOiBlZGl0b3Igbm90IGRpcnR5Jyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBXYWl0IGVuZCBvZiBhc3luYyB2YWxpZGF0aW9uXG4gICAgYXdhaXQgdGhpcy53YWl0V2hpbGVQZW5kaW5nKCk7XG5cbiAgICAvLyBJZiBpbnZhbGlkXG4gICAgaWYgKHRoaXMuaW52YWxpZCkge1xuICAgICAgdGhpcy5sb2dGb3JtRXJyb3JzKCk7XG4gICAgICB0aGlzLm9wZW5GaXJzdEludmFsaWRUYWIoKTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrQXNTYXZpbmcoKTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNhdmluZyBkYXRhLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ29tcHV0ZSBuZXh0IHRhYiBpbmRleCAoaWYgZW5hYmxlKVxuICAgICAgY29uc3QgbmV4dFRhYkluZGV4ID0gdGhpcy5fYXV0b09wZW5OZXh0VGFiICYmIGlzTmlsKHRoaXMucHJldmlvdXNEYXRhSWQpICYmIHRoaXMuY29tcHV0ZU5leHRUYWJJbmRleCgpO1xuXG4gICAgICAvLyBTYXZlIGFsbCBkaXJ0eSB0YWJsZXNcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlRGlydHlDaGlsZHJlbigpO1xuICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBHZXQgZGF0YVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0VmFsdWUoKTtcblxuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIC8vIFNhdmUgZm9ybVxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnNhdmUoZGF0YSwgb3B0cyk7XG5cbiAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlTYXZlZCh1cGRhdGVkRGF0YSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdmlldyAoZS5nIG1ldGFkYXRhKVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KHVwZGF0ZWREYXRhLCB7XG4gICAgICAgIC8vIE9wZW4gbmV4dCB0YWIgb25seSBpZiB1c2VyIGhhcyBub3QgY2hhbmdlZCBpdFxuICAgICAgICBvcGVuVGFiSW5kZXg6IG5leHRUYWJJbmRleCA+IHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPyBuZXh0VGFiSW5kZXggOiB1bmRlZmluZWQsXG4gICAgICAgIC4uLm9wdHMsXG4gICAgICB9KTtcblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIHJlbW90ZSBjaGFuZ2VzXG4gICAgICBpZiAoIXRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pIHRoaXMuc3RhcnRMaXN0ZW5DaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDsgLy8gQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMsIHVzaW5nIHNldEVycm9yKClcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTsgLy8gU2Nyb2xsIHRvIHRvcCAodG8gc2hvdyBlcnJvcilcbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICAgIC8vIENvbmN1cnJlbnQgY2hhbmdlIG9uIHBvZFxuICAgICAgaWYgKGVyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLkJBRF9VUERBVEVfREFURSAmJiBpc05vdE5pbCh0aGlzLmRhdGEuaWQpKSB7XG4gICAgICAgIC8vIENhbGwgYSBkYXRhIHJlbG9hZCAoaW4gYmFja2dyb3VuZCksIHRvIHVwZGF0ZSB0aGUgR3JhcGhRTCBjYWNoZSwgYW5kIGFsbG93IHRvIGNhbmNlbCBjaGFuZ2VzXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UubG9hZCh0aGlzLmRhdGEuaWQsIHsgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gRGF0YSBjYWNoZSByZWxvYWRlZC4gVXNlciBjYW4gcmVsb2FkIHBhZ2UnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGRhdGEgKGlmIGRpcnR5IGFuZCB2YWxpZCksIGFuZCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJuIG5pbCB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIHNhdmVBbmRHZXREYXRhSWZWYWxpZCgpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBGb3JtIGlzIG5vdCB2YWxpZFxuICAgIGlmICghdGhpcy52YWxpZCkge1xuICAgICAgLy8gTWFrZSBzdXJlIHZhbGlkYXRpb24gaXMgZmluaXNoZWRcbiAgICAgIGF3YWl0IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMpO1xuXG4gICAgICAvLyBJZiBpbnZhbGlkOiBPcGVuIHRoZSBmaXJzdCB0YWIgaW4gZXJyb3JcbiAgICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh2YWxpZClcbiAgICB9XG5cbiAgICAvLyBGb3JtIGlzIHZhbGlkLCBidXQgbm90IHNhdmVkXG4gICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKG5ldyBFdmVudCgnc2F2ZScpKTtcbiAgICAgIGlmICghc2F2ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVmFsaWQgYW5kIHNhdmVkIGRhdGFcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBhd2FpdCBBbGVydHMuYXNrRGVsZXRlQ29uZmlybWF0aW9uKHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSk7XG4gICAgaWYgKCFjb25maXJtYXRpb24pIHJldHVybjtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gQXNraW5nIHRvIGRlbGV0ZS4uLicpO1xuXG4gICAgdGhpcy5tYXJrQXNTYXZpbmcoKTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgZGF0YVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IGlzTmV3ID0gdGhpcy5pc05ld0RhdGE7XG5cbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICBpZiAoIWlzTmV3KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZGVsZXRlKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLm9uRW50aXR5RGVsZXRlZChkYXRhKTtcblxuICAgICAgLy8gUmVtb3ZlIHBhZ2UgaGlzdG9yeVxuICAgICAgdGhpcy5yZW1vdmVQYWdlSGlzdG9yeSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gV2FpdCwgdGhlbiBnbyBiYWNrICh3YWl0IGlzIG5lZWQgaW4gb3JkZXIgdG8gdXBkYXRlIGJhY2sgaHJlZiBpcyBuZWVkKVxuICAgIGF3YWl0IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5nb0JhY2soKSwgNTAwKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKCkge1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIGF3YWl0IHRoaXMubG9hZCh0aGlzLmRhdGE/LmlkLCB7IGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyB9KTtcbiAgfVxuXG4gIGFzeW5jIHVubG9hZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci51bmxvYWQob3B0cyk7XG4gICAgdGhpcy5zdG9wTGlzdGVuQ2hhbmdlcygpO1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtcygpO1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgLy8gVE9ETzogZmluZCBhIHdheSB0byByZW1vdmUgY3VycmVudCBwYWdlIGZyb20gdGhlIG5hdmlnYXRpb24gaGlzdG9yeVxuICB9XG5cbiAgYXN5bmMgZ29CYWNrKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQgfCBib29sZWFuPiB7XG4gICAgLy8gR28gYmFja1xuICAgIGlmICh0aGlzLnRvb2xiYXI/LmNhbkdvQmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbGJhci5nb0JhY2soKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdEJhY2tIcmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlQmFjayh0aGlzLmRlZmF1bHRCYWNrSHJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJhY2sgdG8gaG9tZVxuICAgICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUJhY2soJy8nKTtcbiAgICB9XG4gIH1cblxuICByZXNldEVycm9yKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHN1cGVyLnJlc2V0RXJyb3Iob3B0cyk7XG4gIH1cblxuICBzZXRFcnJvcihlcnI6IHN0cmluZyB8IEFwcEVycm9yV2l0aERldGFpbHMsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IGRldGFpbHNDc3NDbGFzcz86IHN0cmluZyB9KSB7XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIHN1cGVyLnNldEVycm9yKHVuZGVmaW5lZCwgb3B0cyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS5lcnJvcignW2VudGl0eS1lZGl0b3JdIEVycm9yOiAnICsgKGVyciB8fCAnJykpO1xuICAgICAgc3VwZXIuc2V0RXJyb3IoZXJyIGFzIHN0cmluZywgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tlbnRpdHktZWRpdG9yXSBFcnJvcjogJyArIGVyci5tZXNzYWdlIHx8ICcnLCBlcnIpO1xuICAgICAgbGV0IHVzZXJNZXNzYWdlID0gKGVyci5tZXNzYWdlICYmIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZXJyLm1lc3NhZ2UpKSB8fCBlcnI7XG5cbiAgICAgIC8vIEFkZCBkZXRhaWxzIGVycm9yIChpZiBhbnkpIHVuZGVyIHRoZSBtYWluIG1lc3NhZ2VcbiAgICAgIGNvbnN0IGRldGFpbE1lc3NhZ2UgPSAhZXJyLmRldGFpbHMgfHwgdHlwZW9mIGVyci5kZXRhaWxzID09PSAnc3RyaW5nJyA/IChlcnIuZGV0YWlscyBhcyBzdHJpbmcpIDogZXJyLmRldGFpbHMubWVzc2FnZTtcbiAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsoZGV0YWlsTWVzc2FnZSkpIHtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBvcHRzPy5kZXRhaWxzQ3NzQ2xhc3MgfHwgJ2Vycm9yLWRldGFpbHMnO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSBgPGJyLz48c21hbGwgY2xhc3M9XCIke2Nzc0NsYXNzfVwiIHRpdGxlPVwiJHtkZXRhaWxNZXNzYWdlfVwiPmA7XG4gICAgICAgIHVzZXJNZXNzYWdlICs9IGRldGFpbE1lc3NhZ2UubGVuZ3RoIDwgNzAgPyBkZXRhaWxNZXNzYWdlIDogZGV0YWlsTWVzc2FnZS5zdWJzdHJpbmcoMCwgNjcpICsgJy4uLic7XG4gICAgICAgIHVzZXJNZXNzYWdlICs9ICc8L3NtYWxsPic7XG4gICAgICB9XG4gICAgICBzdXBlci5zZXRFcnJvcih1c2VyTWVzc2FnZSwgb3B0cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzbmFwc2hvdCByb3V0ZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgbG9hZEZyb21Sb3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUuc25hcHNob3Q7XG4gICAgaWYgKCFyb3V0ZSB8fCBpc05pbE9yQmxhbmsodGhpcy5fcGF0aElkQXR0cmlidXRlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGxvYWQgZnJvbSByb3V0ZTogbWlzc2luZyAncm91dGUnIG9yICdvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZScuXCIpO1xuICAgIH1cbiAgICBsZXQgaWQgPSByb3V0ZS5wYXJhbXNbdGhpcy5fcGF0aElkQXR0cmlidXRlXTtcbiAgICBpZiAoaXNOaWwoaWQpIHx8IGlkID09PSAnbmV3Jykge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZCh1bmRlZmluZWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnZlcnQgYXMgbnVtYmVyLCBpZiBuZWVkXG4gICAgICBpZiAoaXNJbnQoaWQpKSB7XG4gICAgICAgIGlkID0gcGFyc2VJbnQoaWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubG9hZChpZCwgcm91dGUucGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHVuZGVmaW5lZCB0byBrZWVwIHNhbWUgdGFiXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjb21wdXRlTmV4dFRhYkluZGV4KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbmV4dFRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4ICsgMTtcbiAgICByZXR1cm4gbmV4dFRhYkluZGV4IDwgdGhpcy50YWJDb3VudCA/IG5leHRUYWJJbmRleCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkJlZm9yZUVudGl0eUxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbk5ld0VudGl0eShkYXRhOiBULCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eUxvYWRlZChkYXRhOiBULCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eVNhdmVkKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5RGVsZXRlZChkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlVXNhZ2VNb2RlKGRhdGE6IFQpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzVXNhZ2VNb2RlKCdGSUVMRCcpID8gJ0ZJRUxEJyA6ICdERVNLJztcbiAgfVxuXG4gIHByb3RlY3RlZCB3YWl0V2hpbGVQZW5kaW5nKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyh0aGlzLCBvcHRzKTtcbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCB0aGlzLmdldEpzb25WYWx1ZVRvU2F2ZSgpO1xuXG4gICAgY29uc3QgcmVzID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICByZXMuZnJvbU9iamVjdChqc29uKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SnNvblZhbHVlVG9TYXZlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHRpdGxlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlVGl0bGUoZGF0YT86IFQpIHtcbiAgICBkYXRhID0gZGF0YSB8fCB0aGlzLmRhdGE7XG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmNvbXB1dGVUaXRsZShkYXRhKTtcbiAgICB0aGlzLnRpdGxlU3ViamVjdC5uZXh0KHRpdGxlKTtcblxuICAgIC8vIElmIE5PVCBkYXRhLCB0aGVuIGFkZCB0byBwYWdlIGhpc3RvcnlcbiAgICBpZiAoIXRoaXMuaXNOZXdEYXRhKSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy5jb21wdXRlUGFnZUhpc3RvcnkodGl0bGUpO1xuICAgICAgaWYgKHBhZ2UpIHJldHVybiB0aGlzLmFkZFRvUGFnZUhpc3RvcnkocGFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsIG9wdHM/OiBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucykge1xuICAgIGlmICghcGFnZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIHtcbiAgICAgIHJlbW92ZVBhdGhRdWVyeVBhcmFtczogdHJ1ZSxcbiAgICAgIHJlbW92ZVRpdGxlU21hbGxUYWc6IHRydWUsXG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb21wdXRlUGFnZUhpc3RvcnkodGl0bGU6IHN0cmluZyk6IFByb21pc2U8SGlzdG9yeVBhZ2VSZWZlcmVuY2U+IHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2VudGl0eS1lZGl0b3JdIENvbXB1dGluZyBwYWdlIGhpc3RvcnksIHVzaW5nIHVybDogJyArIHRoaXMucm91dGVyLnVybCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlLFxuICAgICAgcGF0aDogdGhpcy5yb3V0ZXIudXJsLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVtb3ZlUGFnZUhpc3Rvcnkob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucmVtb3ZlUGFnZUhpc3RvcnkodGhpcy5yb3V0ZXIudXJsLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlUGFnZVVybChpZDogSUQgfCAnbmV3Jyk6IHN0cmluZyB8IGFueVtdIHtcbiAgICBjb25zdCBwYXJlbnRVcmwgPSB0aGlzLmdldFBhcmVudFBhZ2VVcmwoKTtcbiAgICByZXR1cm4gcGFyZW50VXJsICYmIGAke3BhcmVudFVybH0vJHtpZH1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhcmVudFBhZ2VVcmwod2l0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbikge1xuICAgIGxldCBwYXJlbnRVcmwgPSB0aGlzLmRlZmF1bHRCYWNrSHJlZjtcblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAod2l0aFF1ZXJ5UGFyYW1zICE9PSB0cnVlICYmIHBhcmVudFVybCAmJiBwYXJlbnRVcmwuaW5kZXhPZignPycpICE9PSAtMSkge1xuICAgICAgcGFyZW50VXJsID0gcGFyZW50VXJsLnN1YnN0cmluZygwLCBwYXJlbnRVcmwuaW5kZXhPZignPycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50VXJsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGxpc3RlbkNoYW5nZXMoaWQ6IElELCBvcHRzPzogYW55KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UubGlzdGVuQ2hhbmdlcyh0aGlzLmRhdGEuaWQsIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0byBza2lwIGNhY2hlLCBiZWNhdXNlIE5PVCB0aGUgZnVsbCBncmFwaCB3aWxsIGJlIGZldGNoZWQgYnkgc3Vic2NyaXB0aW9uXG4gICAgICAvLyBXaGVuIGEgY2hhbmdlcyBvY2N1ciwgd2UgY2FsbCByZWxvYWQoKSB0byBmb3JjZSByZWZldGNoaW5nIHRoZSBmdWxsIGdyYXBoXG4gICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSwgd2l0aG91dCByZWxvYWRpbmcgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVJvdXRlKGRhdGE6IFQsIHF1ZXJ5UGFyYW1zPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY3VycklkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQodGhpcy5wYXRoSWRBdHRyaWJ1dGUpO1xuICAgIGNvbnN0IGZ1dHVyZUlkID0gaXNOb3ROaWwoZGF0YS5pZCkgPyBkYXRhLmlkLnRvU3RyaW5nKCkgOiAnbmV3JztcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgLi4udGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgIH07XG4gICAgaWYgKGN1cnJJZCA9PT0gZnV0dXJlSWQpIHtcbiAgICAgIC8vIFVwZGF0ZSBxdWVyeVBhcmFtIG9ubHkgKG5vdCB0aGUgcGF0aClcbiAgICAgIGlmICghZXF1YWxzKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMsIHRoaXMucXVlcnlQYXJhbXMpKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbZW50aXR5LWVkaXRvcl0gVXBkYXRpbmcgcm91dGUgdXNpbmcgcXVlcnlQYXJhbXM6ICcsIHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLiddLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICByZXBsYWNlVXJsOiBmYWxzZSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICBzdGF0ZTogeyBhbmltYXRlZDogZmFsc2UgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEN1cnJlbnQgcm91dGUgd2FzICcvbmV3JyA9PiBjaGFuZ2UgdG8gJy9uZXc/aWQ9OmlkJyAodG8gYWxsb3cgQ3VzdG9tUmV1c2VTdHJhdGVneSB0byBkZXRlY3QgdGhhdCByb3V0ZSBjYW4gYmUgcmV1c2VkKVxuICAgICAgaWYgKGN1cnJJZCA9PT0gJ25ldycpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdHktZWRpdG9yXSBVcGRhdGluZyByb3V0ZSAvbmV3IGludG8gLzppZCwgdXNpbmcgcXVlcnlQYXJhbXM6ICcsIHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBbdGhpcy5wYXRoSWRBdHRyaWJ1dGVdOiBmdXR1cmVJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXRlOiB7IGFuaW1hdGVkOiBmYWxzZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBhZ2VVcmwoaXNOb3ROaWwoZGF0YS5pZCkgPyBkYXRhLmlkIDogJ25ldycpO1xuICAgICAgY29uc3QgY29tbWFuZHM6IGFueVtdID0gcGF0aCAmJiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyBwYXRoLnNwbGl0KCcvJykuc2xpY2UoMSkgOiAocGF0aCBhcyBhbnlbXSk7XG4gICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGNvbW1hbmRzKSkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2VudGl0eS1lZGl0b3JdIFVwZGF0aW5nIHJvdXRlIHRvOiAnICsgcGF0aCk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgc3RhdGU6IHsgYW5pbWF0ZWQ6IGZhbHNlIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHBhZ2UgVVJMJyk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBmdW5jdGlvbnMgLS0gKi9cblxuICAvKipcbiAgICogT3BlbiB0aGUgZmlyc3QgdGFiIHRoYXQgaXMgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBvcGVuRmlyc3RJbnZhbGlkVGFiKCkge1xuICAgIGNvbnN0IGludmFsaWRUYWJJbmRleCA9IHRoaXMuZ2V0Rmlyc3RJbnZhbGlkVGFiSW5kZXgoKTtcbiAgICBpZiAoaW52YWxpZFRhYkluZGV4ICE9PSAtMSAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggIT09IGludmFsaWRUYWJJbmRleCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaW52YWxpZFRhYkluZGV4O1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgYWJzdHJhY3QgbWV0aG9kcyAodG8gb3ZlcnJpZGUpIC0tICovXG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbXB1dGVUaXRsZShkYXRhOiBUKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgZm9ybSgpOiBGb3JtR3JvdXA7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk6IG51bWJlcjtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVnaXN0ZXJGb3JtcygpOiB2b2lkO1xuXG4gIGFic3RyYWN0IHNldFZhbHVlKGRhdGE6IFQsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG4iXX0=
737
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS9lbnRpdHktZWRpdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBK0IsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUF5QixNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBMkIsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJckUsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQXVCLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFl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Q0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDOUUsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtvQkFDMUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtpQkFDM0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsNkJBQTZCO0lBRTdCOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksZUFBZSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUN4RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQzt3R0F0ekJtQixlQUFlOzRGQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRnBDLFNBQVM7OzBCQW1GTCxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgSW9uUm91dGVyT3V0bGV0LCBOYXZDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMsIExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBVc2FnZU1vZGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBcHBUYWJFZGl0b3IsIEFwcFRhYkVkaXRvck9wdGlvbnMsIElBcHBUYWJFZGl0b3IgfSBmcm9tICcuL3RhYi1lZGl0b3IuY2xhc3MnO1xuaW1wb3J0IHsgQXBwRm9ybVV0aWxzIH0gZnJvbSAnLi4vZm9ybS51dGlscyc7XG5pbXBvcnQgeyBBbGVydHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYWxlcnRzJztcbmltcG9ydCB7IEFwcEVycm9yV2l0aERldGFpbHMsIEVycm9yQ29kZXMsIFNlcnZlckVycm9yQ29kZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHsgZXF1YWxzLCBpc0ludCwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW4sIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IERhdGVGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3BpcGVzL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IEhpc3RvcnlQYWdlUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kZWwvaGlzdG9yeS5tb2RlbCc7XG5pbXBvcnQgeyBmaXJzdEZhbHNlLCB3YWl0Rm9yRmFsc2UsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IEZvcm1FcnJvclRyYW5zbGF0b3IgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBpc1N0YXJ0YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBFbnRpdHlFZGl0b3I8VD4gZXh0ZW5kcyBJQXBwVGFiRWRpdG9yPFQ+IHtcbiAgdXNhZ2VNb2RlOiBVc2FnZU1vZGU7XG4gIGlzTmV3RGF0YTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcEVkaXRvck9wdGlvbnMgZXh0ZW5kcyBBcHBUYWJFZGl0b3JPcHRpb25zIHtcbiAgYXV0b0xvYWQ/OiBib29sZWFuO1xuICBhdXRvTG9hZERlbGF5PzogbnVtYmVyO1xuICBwYXRoSWRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGVuYWJsZUxpc3RlbkNoYW5nZXM/OiBib29sZWFuO1xuICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hhbmdlIHBhZ2Ugcm91dGUgKHdpbmRvdyBVUkwpIHdoZW4gc2F2aW5nIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgYXV0b1VwZGF0ZVJvdXRlPzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byB0cnVlXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIG5leHQgdGFiLCBhZnRlciBzYXZpbmcgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBhdXRvT3Blbk5leHRUYWI/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIHRydWVcblxuICBpMThuUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBFbnRpdHlFZGl0b3I8XG4gICAgVCBleHRlbmRzIEVudGl0eTxULCBJRD4sXG4gICAgUyBleHRlbmRzIElFbnRpdHlTZXJ2aWNlPFQsIElEPiA9IElFbnRpdHlTZXJ2aWNlPFQsIGFueT4sXG4gICAgSUQgPSBudW1iZXIsXG4gICAgTE8gZXh0ZW5kcyBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgPSBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsXG4gID5cbiAgZXh0ZW5kcyBBcHBUYWJFZGl0b3I8VCwgSUQsIExPPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBJQXBwRW50aXR5RWRpdG9yPFQ+XG57XG4gIGRhdGE6IFQ7XG4gIHByZXZpb3VzRGF0YUlkOiBJRDtcblxuICBkZWZhdWx0QmFja0hyZWY6IHN0cmluZztcbiAgaGlzdG9yeUljb246IHsgaWNvbj86IHN0cmluZzsgbWF0SWNvbj86IHN0cmluZyB9O1xuXG4gIHJlYWRvbmx5IHRpdGxlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICByZWFkb25seSBvblVwZGF0ZVZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgLyoqXG4gICAqICBAZGVwcmVjYXRlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCAkdGl0bGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy50aXRsZVN1YmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0ZUZvcm1hdDogRGF0ZUZvcm1hdFNlcnZpY2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXJPdXRsZXQ6IElvblJvdXRlck91dGxldDtcbiAgcHJvdGVjdGVkIGVycm9yVHJhbnNsYXRvcjogRm9ybUVycm9yVHJhbnNsYXRvcjtcblxuICBwcml2YXRlIF91c2FnZU1vZGU6IFVzYWdlTW9kZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5hYmxlTGlzdGVuQ2hhbmdlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGF0aElkQXR0cmlidXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9Mb2FkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvTG9hZERlbGF5OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9VcGRhdGVSb3V0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYXV0b09wZW5OZXh0VGFiOiBib29sZWFuO1xuICBwcml2YXRlIF9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiB0aGlzLl91c2FnZU1vZGU7XG4gIH1cblxuICBzZXQgdXNhZ2VNb2RlKHZhbHVlOiBVc2FnZU1vZGUpIHtcbiAgICBpZiAodGhpcy5fdXNhZ2VNb2RlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdmFsdWU7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc09uRmllbGRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzT25GaWVsZE1vZGUodGhpcy5fdXNhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCBpc05ld0RhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuZGF0YT8uaWQpO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2UoKTogUyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2U7XG4gIH1cblxuICBnZXQgYXV0b09wZW5OZXh0VGFiKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hdXRvT3Blbk5leHRUYWI7XG4gIH1cblxuICBzZXQgYXV0b09wZW5OZXh0VGFiKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b09wZW5OZXh0VGFiID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHBhdGhJZEF0dHJpYnV0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wYXRoSWRBdHRyaWJ1dGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBkYXRhVHlwZTogbmV3ICgpID0+IFQsXG4gICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlPzogUyxcbiAgICBAT3B0aW9uYWwoKSBvcHRpb25zPzogQXBwRWRpdG9yT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSksXG4gICAgICBpbmplY3Rvci5nZXQoUm91dGVyKSxcbiAgICAgIGluamVjdG9yLmdldChOYXZDb250cm9sbGVyKSxcbiAgICAgIGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGluamVjdG9yLmdldChFTlZJUk9OTUVOVCk7XG4gICAgb3B0aW9ucyA9IDxBcHBFZGl0b3JPcHRpb25zPntcbiAgICAgIC8vIERlZmF1bHQgb3B0aW9uc1xuICAgICAgZW5hYmxlTGlzdGVuQ2hhbmdlczogdGhpcy5lbnZpcm9ubWVudC5lbnRpdHlFZGl0b3I/LmVuYWJsZUxpc3RlbkNoYW5nZXMgfHwgZmFsc2UsIC8vIEZhbHNlICBieSBkZWZhdWx0XG4gICAgICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kczogdG9OdW1iZXIodGhpcy5lbnZpcm9ubWVudC5lbnRpdHlFZGl0b3I/Lmxpc3RlbkludGVydmFsSW5TZWNvbmRzLCAwKSwgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuICAgICAgcGF0aElkQXR0cmlidXRlOiAnaWQnLFxuICAgICAgYXV0b0xvYWQ6IHRydWUsXG4gICAgICBhdXRvVXBkYXRlUm91dGU6IHRydWUsXG4gICAgICBpMThuUHJlZml4OiAnJyxcblxuICAgICAgLy8gRm9sbG93aW5nIG9wdGlvbnMgYXJlIG92ZXJyaWRlIGluc2lkZSBuZ09uSW5pdCgpXG4gICAgICAvLyBhdXRvT3Blbk5leHRUYWI6IC4uLixcblxuICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdHNcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIHRoaXMuY2QgPSBpbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBpbmplY3Rvci5nZXQoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICAgIHRoaXMuZXJyb3JUcmFuc2xhdG9yID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMucm91dGVyT3V0bGV0ID0gaW5qZWN0b3IuZ2V0KElvblJvdXRlck91dGxldCk7XG4gICAgdGhpcy5kYXRlRm9ybWF0ID0gaW5qZWN0b3IuZ2V0KERhdGVGb3JtYXRTZXJ2aWNlKTtcbiAgICB0aGlzLnRvYXN0Q29udHJvbGxlciA9IGluamVjdG9yLmdldChUb2FzdENvbnRyb2xsZXIpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSBvcHRpb25zLmVuYWJsZUxpc3RlbkNoYW5nZXM7XG4gICAgdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHMgPSBvcHRpb25zLmxpc3RlbkludGVydmFsSW5TZWNvbmRzO1xuICAgIHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSA9IG9wdGlvbnMucGF0aElkQXR0cmlidXRlO1xuICAgIHRoaXMuX2F1dG9Mb2FkID0gb3B0aW9ucy5hdXRvTG9hZDtcbiAgICB0aGlzLl9hdXRvTG9hZERlbGF5ID0gb3B0aW9ucy5hdXRvTG9hZERlbGF5O1xuICAgIHRoaXMuX2F1dG9VcGRhdGVSb3V0ZSA9IG9wdGlvbnMuYXV0b1VwZGF0ZVJvdXRlO1xuICAgIHRoaXMuX2F1dG9PcGVuTmV4dFRhYiA9IG9wdGlvbnMuYXV0b09wZW5OZXh0VGFiO1xuICAgIHRoaXMuaTE4bkNvbnRleHQgPSB7XG4gICAgICBwcmVmaXg6IG9wdGlvbnMuaTE4blByZWZpeCxcbiAgICAgIHN1ZmZpeDogJycsXG4gICAgfTtcblxuICAgIC8vIEZPUiBERVYgT05MWSAtLS0tXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgdGhpcy5fbG9nUHJlZml4ID0gJ1tlbnRpdHktZWRpdG9yXSAnO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIERlZmF1bHRzXG4gICAgdGhpcy5fYXV0b09wZW5OZXh0VGFiID0gdG9Cb29sZWFuKHRoaXMuX2F1dG9PcGVuTmV4dFRhYiwgIXRoaXMuaXNPbkZpZWxkTW9kZSk7XG4gICAgdGhpcy5oaXN0b3J5SWNvbiA9IHRoaXMuaGlzdG9yeUljb24gfHwgeyBpY29uOiAnbGlzdCcgfTtcblxuICAgIC8vIFJlZ2lzdGVyIGZvcm1zXG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG5cbiAgICAvLyBEaXNhYmxlIHBhZ2UsIGR1cmluZyBsb2FkXG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAvLyBMb2FkIGRhdGFcbiAgICBpZiAodGhpcy5fYXV0b0xvYWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkRnJvbVJvdXRlKCksIHRoaXMuX2F1dG9Mb2FkRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy50aXRsZVN1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLnRpdGxlU3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25VcGRhdGVWaWV3LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblVwZGF0ZVZpZXcudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFdhaXQgZW5kIG9mIHNhdmluZ1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuIHdhaXRGb3JGYWxzZSh0aGlzLnNhdmluZ1N1YmplY3QsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KTtcblxuICAgIHJldHVybiBzdXBlci53YWl0SWRsZShvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSBpZCwgdXNpbmcgdGhlIGRhdGFTZXJ2aWNlXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgbG9hZChcbiAgICBpZD86IElELFxuICAgIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgJiB7XG4gICAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgICAgb3BlblRhYkluZGV4PzogbnVtYmVyO1xuICAgICAgdXBkYXRlUm91dGU/OiBib29sZWFuO1xuICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH1cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbG9hZCBkYXRhOiBtaXNzaW5nICdkYXRhU2VydmljZSchXCIpO1xuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBOZXcgZGF0YVxuICAgIGlmIChpc05pbChpZCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENyZWF0ZSB1c2luZyBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdGhpcy5jb21wdXRlVXNhZ2VNb2RlKGRhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uTmV3RW50aXR5KGRhdGEsIG9wdHMpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcoZGF0YSwge1xuICAgICAgICAgIG9wZW5UYWJJbmRleDogMCxcbiAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVyciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQoaWQsIG9wdHMpO1xuICAgICAgICBpZiAoIWRhdGEpIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5EQVRBX05PVF9GT1VORF9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkRBVEFfTk9fRk9VTkQnIH07XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eUxvYWRlZChkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIG9wdHMpO1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuQ2hhbmdlcygpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuVXNlcldyaXRlKGRhdGE6IFQsIG9wdHM/OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5jYW5Vc2VyV3JpdGUoZGF0YSwgb3B0cyk7XG4gIH1cblxuICBzdGFydExpc3RlbkNoYW5nZXMoKSB7XG4gICAgLy8gU2tpcCBpZiBkaXNhYmxlZCwgb3IgYWxyZWFkeSBsaXN0ZW5pbmdcbiAgICBpZiAodGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiB8fCAhdGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgcmV0dXJuO1xuICAgIC8vIFNraXAgaWYgbmV3IChub3RoaW5nIHRvIGxpc3RlbilcbiAgICBpZiAodGhpcy5pc05ld0RhdGEpIHJldHVybjtcblxuICAgIC8vIExpc3RlbiBmb3IgY2hhbmdlcyBvbiBzZXJ2ZXJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbkNoYW5nZXModGhpcy5kYXRhLmlkLCB7XG4gICAgICBpbnRlcnZhbDogdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHMsXG4gICAgfSlcbiAgICAgID8ucGlwZShcbiAgICAgICAgZmlsdGVyKGlzTm90TmlsKSxcbiAgICAgICAgbWVyZ2VNYXAoKGRhdGEpID0+XG4gICAgICAgICAgdGhpcy5zYXZpbmdcbiAgICAgICAgICAgID8gLy8gSWYgc2F2aW5nLCB3YWl0IGVuZCwgdG8gYXZvaWQgdG8gZGV0ZWN0IHNlbGYgY2hhbmdlc1xuICAgICAgICAgICAgICBmaXJzdEZhbHNlKHRoaXMuc2F2aW5nU3ViamVjdCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gZGF0YSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBvZihkYXRhKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBUKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTmV3ZXIgPSBpc01vbWVudChkYXRhLnVwZGF0ZURhdGUpICYmICghdGhpcy5kYXRhLnVwZGF0ZURhdGUgfHwgZGF0YS51cGRhdGVEYXRlLmlzQWZ0ZXIodGhpcy5kYXRhLnVwZGF0ZURhdGUpKTtcbiAgICAgICAgaWYgKCFpc05ld2VyKSByZXR1cm47IC8vIFNraXBcblxuICAgICAgICAvLyBFZGl0b3IgaGFzIG5vIGNoYW5nZXM6IHJlbG9hZFxuICAgICAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2RhdGEtZWRpdG9yXSBDaGFuZ2VzIGRldGVjdGVkIG9uIHNlcnZlciwgYXQgeyR7ZGF0YS51cGRhdGVEYXRlfX06IHJlbG9hZGluZyBwYWdlLi4uYCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW5ub3QgcmVsb2FkOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2RhdGEtZWRpdG9yXSBDaGFuZ2VzIGRldGVjdGVkIG9uIHNlcnZlciwgYXQgeyR7ZGF0YS51cGRhdGVEYXRlfX0sIGJ1dCBwYWdlIGlzIGRpcnR5OiBza2lwIHJlbG9hZGluZy5gKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdFUlJPUi5EQVRBX1VQREFURV9EQVRFX0NIQU5HRUQnLCB0eXBlOiAnd2FybmluZycsIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAvLyBSZWdpc3RlciBzdWJzY3JpcHRpb25cbiAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uO1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVucmVnaXN0ZXJTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdG9wTGlzdGVuQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgcmVhZHkob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIucmVhZHkob3B0cyk7XG5cbiAgICAvLyBXYWl0IHNlcnZpY2UgdG8gYmUgcmVhZHlcbiAgICBpZiAoaXNTdGFydGFibGVTZXJ2aWNlKHRoaXMuZGF0YVNlcnZpY2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnJlYWR5KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhcbiAgICBkYXRhOiBUIHwgbnVsbCxcbiAgICBvcHRzPzoge1xuICAgICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICAgIHVwZGF0ZVJvdXRlPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlkQ2hhbmdlZCA9XG4gICAgICBpc05vdE5pbChkYXRhLmlkKSAmJlxuICAgICAgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gdW5kZWZpbmVkICYmIC8vIElnbm9yZSBpZiBmaXJzdCBsb2FkaW5nICg9dW5kZWZpbmVkKVxuICAgICAgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gZGF0YS5pZDtcblxuICAgIG9wdHMgPSB7XG4gICAgICB1cGRhdGVSb3V0ZTogdGhpcy5fYXV0b1VwZGF0ZVJvdXRlICYmIGlkQ2hhbmdlZCAmJiAhdGhpcy5sb2FkaW5nLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnByZXZpb3VzRGF0YUlkID0gZGF0YS5pZCB8fCBudWxsO1xuXG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUoZGF0YSk7XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoZGF0YSk7XG5cbiAgICAgIC8vIE5lZWQgdG8gdXBkYXRlIHJvdXRlXG4gICAgICBpZiAob3B0cy51cGRhdGVSb3V0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRhYkFuZFJvdXRlKGRhdGEsIG9wdHMpXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZSAtIHNob3VsZCBiZSBleGVjdXRlZCBBRlRFUiB1cGRhdGVSb3V0ZSBiZWNhdXNlIG9mIHBhdGggY2hhbmdlIC0gZml4ICMxODVcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnVwZGF0ZVRpdGxlKGRhdGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbmV4dCB0YWJcbiAgICAgICAgdGhpcy51cGRhdGVUYWJJbmRleChvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZS5cbiAgICAgICAgdGhpcy51cGRhdGVUaXRsZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vblVwZGF0ZVZpZXcuZW1pdChkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc3RhdGVcbiAgICovXG4gIHVwZGF0ZVZpZXdTdGF0ZShkYXRhOiBULCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmlzTmV3RGF0YSB8fCB0aGlzLmNhblVzZXJXcml0ZShkYXRhKSkge1xuICAgICAgdGhpcy5lbmFibGUob3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzYWJsZShvcHRzKTtcblxuICAgICAgLy8gQWxsb3cgdG8gc29ydCB0YWJsZXNcbiAgICAgIHRoaXMudGFibGVzPy5mb3JFYWNoKCh0KSA9PiB0LmVuYWJsZVNvcnQoKSk7XG4gICAgICB0aGlzLmFzeW5jVGFibGVzPy5mb3JFYWNoKCh0KSA9PiB0LmVuYWJsZVNvcnQoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUgbG9jYXRpb24sIGFuZCBvcGVuIHRoZSBuZXh0IHRhYlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVGFiQW5kUm91dGUoXG4gICAgZGF0YTogVCxcbiAgICBvcHRzPzoge1xuICAgICAgb3BlblRhYkluZGV4PzogbnVtYmVyO1xuICAgIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucXVlcnlQYXJhbXMgfTtcblxuICAgIC8vIE9wZW4gdGhlIG5leHQgdGFiXG4gICAgdGhpcy51cGRhdGVUYWJJbmRleChvcHRzICYmIG9wdHMub3BlblRhYkluZGV4KTtcblxuICAgIGlmICghdGhpcy5xdWVyeVRhYkluZGV4UGFyYW1OYW1lIHx8ICF0aGlzLnJvdXRlKSByZXR1cm47IC8vIFNraXAgcm91dGUgdXBkYXRlXG5cbiAgICAvLyBVcGRhdGUgcm91dGUgbG9jYXRpb25cbiAgICBxdWVyeVBhcmFtc1t0aGlzLnF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWVdID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4ICE9PSAwID8gdGhpcy5zZWxlY3RlZFRhYkluZGV4IDogdW5kZWZpbmVkO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlUm91dGUoZGF0YSwgcXVlcnlQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUgbG9jYXRpb24sIGFuZCBvcGVuIHRoZSBuZXh0IHRhYlxuICAgKi9cbiAgdXBkYXRlVGFiSW5kZXgodGFiSW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoaXNOb3ROaWwodGFiSW5kZXgpICYmIHRhYkluZGV4ID49IDAgJiYgdGFiSW5kZXggIT09IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBbmRDbG9zZShldmVudDogRXZlbnQsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZShldmVudCk7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNhdmVkO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBlZGl0b3IsIGJ5IGNhbGxpbmcgdGhlIGRhdGFTZXJ2aWNlLnNhdmUoKS5cbiAgICogRW5zdXJlIHRoYXQgZWRpdG9yIGlmIHZhbGlkLiBJZiBub3QsIGRpc3BsYXkgYW4gZXJyb3JcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBzYXZlKGV2ZW50PzogRXZlbnQsIG9wdHM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNraXAgc2F2ZTogZWRpdG9yIGlzIGJ1c3kgKGxvYWRpbmcgb3Igc2F2aW5nKScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGlydHkgJiYgIXRoaXMuaXNOZXdEYXRhKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNraXAgc2F2ZTogZWRpdG9yIG5vdCBkaXJ0eScpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gV2FpdCBlbmQgb2YgYXN5bmMgdmFsaWRhdGlvblxuICAgIGF3YWl0IHRoaXMud2FpdFdoaWxlUGVuZGluZygpO1xuXG4gICAgLy8gSWYgaW52YWxpZFxuICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgIHRoaXMubG9nRm9ybUVycm9ycygpO1xuICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTYXZpbmcgZGF0YS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbXB1dGUgbmV4dCB0YWIgaW5kZXggKGlmIGVuYWJsZSlcbiAgICAgIGNvbnN0IG5leHRUYWJJbmRleCA9IHRoaXMuX2F1dG9PcGVuTmV4dFRhYiAmJiBpc05pbCh0aGlzLnByZXZpb3VzRGF0YUlkKSAmJiB0aGlzLmNvbXB1dGVOZXh0VGFiSW5kZXgoKTtcblxuICAgICAgLy8gU2F2ZSBhbGwgZGlydHkgdGFibGVzXG4gICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZURpcnR5Q2hpbGRyZW4oKTtcbiAgICAgIGlmICghc2F2ZWQpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gR2V0IGRhdGFcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG5cbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICAvLyBTYXZlIGZvcm1cbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5zYXZlKGRhdGEsIG9wdHMpO1xuXG4gICAgICBhd2FpdCB0aGlzLm9uRW50aXR5U2F2ZWQodXBkYXRlZERhdGEpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHZpZXcgKGUuZyBtZXRhZGF0YSlcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyh1cGRhdGVkRGF0YSwge1xuICAgICAgICAvLyBPcGVuIG5leHQgdGFiIG9ubHkgaWYgdXNlciBoYXMgbm90IGNoYW5nZWQgaXRcbiAgICAgICAgb3BlblRhYkluZGV4OiBuZXh0VGFiSW5kZXggPiB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID8gbmV4dFRhYkluZGV4IDogdW5kZWZpbmVkLFxuICAgICAgICAuLi5vcHRzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byByZW1vdGUgY2hhbmdlc1xuICAgICAgaWYgKCF0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKSB0aGlzLnN0YXJ0TGlzdGVuQ2hhbmdlcygpO1xuXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7IC8vIENhbiBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzLCB1c2luZyBzZXRFcnJvcigpXG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7IC8vIFNjcm9sbCB0byB0b3AgKHRvIHNob3cgZXJyb3IpXG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuXG4gICAgICAvLyBDb25jdXJyZW50IGNoYW5nZSBvbiBwb2RcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5CQURfVVBEQVRFX0RBVEUgJiYgaXNOb3ROaWwodGhpcy5kYXRhLmlkKSkge1xuICAgICAgICAvLyBDYWxsIGEgZGF0YSByZWxvYWQgKGluIGJhY2tncm91bmQpLCB0byB1cGRhdGUgdGhlIEdyYXBoUUwgY2FjaGUsIGFuZCBhbGxvdyB0byBjYW5jZWwgY2hhbmdlc1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQodGhpcy5kYXRhLmlkLCB7IGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIERhdGEgY2FjaGUgcmVsb2FkZWQuIFVzZXIgY2FuIHJlbG9hZCBwYWdlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBkYXRhIChpZiBkaXJ0eSBhbmQgdmFsaWQpLCBhbmQgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiBuaWwgdmFsdWUuXG4gICAqL1xuICBhc3luYyBzYXZlQW5kR2V0RGF0YUlmVmFsaWQoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gRm9ybSBpcyBub3QgdmFsaWRcbiAgICBpZiAoIXRoaXMudmFsaWQpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB2YWxpZGF0aW9uIGlzIGZpbmlzaGVkXG4gICAgICBhd2FpdCBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyh0aGlzKTtcblxuICAgICAgLy8gSWYgaW52YWxpZDogT3BlbiB0aGUgZmlyc3QgdGFiIGluIGVycm9yXG4gICAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICAgIHRoaXMub3BlbkZpcnN0SW52YWxpZFRhYigpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDb250aW51ZSAodmFsaWQpXG4gICAgfVxuXG4gICAgLy8gRm9ybSBpcyB2YWxpZCwgYnV0IG5vdCBzYXZlZFxuICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZShuZXcgRXZlbnQoJ3NhdmUnKSk7XG4gICAgICBpZiAoIXNhdmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFZhbGlkIGFuZCBzYXZlZCBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShldmVudD86IEV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCB0aGlzLnNhdmluZykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgQWxlcnRzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUpO1xuICAgIGlmICghY29uZmlybWF0aW9uKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIEFza2luZyB0byBkZWxldGUuLi4nKTtcblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGRhdGFcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBpc05ldyA9IHRoaXMuaXNOZXdEYXRhO1xuXG4gICAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgaWYgKCFpc05ldykge1xuICAgICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmRlbGV0ZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eURlbGV0ZWQoZGF0YSk7XG5cbiAgICAgIC8vIFJlbW92ZSBwYWdlIGhpc3RvcnlcbiAgICAgIHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdhaXQsIHRoZW4gZ28gYmFjayAod2FpdCBpcyBuZWVkIGluIG9yZGVyIHRvIHVwZGF0ZSBiYWNrIGhyZWYgaXMgbmVlZClcbiAgICBhd2FpdCBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZ29CYWNrKCksIDUwMCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZCgpIHtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWQodGhpcy5kYXRhPy5pZCwgeyBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScgfSk7XG4gIH1cblxuICBhc3luYyB1bmxvYWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIudW5sb2FkKG9wdHMpO1xuICAgIHRoaXMuc3RvcExpc3RlbkNoYW5nZXMoKTtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRm9ybXMoKTtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIC8vIFRPRE86IGZpbmQgYSB3YXkgdG8gcmVtb3ZlIGN1cnJlbnQgcGFnZSBmcm9tIHRoZSBuYXZpZ2F0aW9uIGhpc3RvcnlcbiAgfVxuXG4gIGFzeW5jIGdvQmFjayhldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbj4ge1xuICAgIC8vIEdvIGJhY2tcbiAgICBpZiAodGhpcy50b29sYmFyPy5jYW5Hb0JhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2xiYXIuZ29CYWNrKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRCYWNrSHJlZikge1xuICAgICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUJhY2sodGhpcy5kZWZhdWx0QmFja0hyZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrIHRvIGhvbWVcbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVCYWNrKCcvJyk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRFcnJvcihvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBzdXBlci5yZXNldEVycm9yKG9wdHMpO1xuICB9XG5cbiAgc2V0RXJyb3IoZXJyOiBzdHJpbmcgfCBBcHBFcnJvcldpdGhEZXRhaWxzLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBkZXRhaWxzQ3NzQ2xhc3M/OiBzdHJpbmcgfSkge1xuICAgIGlmICghZXJyKSB7XG4gICAgICBzdXBlci5zZXRFcnJvcih1bmRlZmluZWQsIG9wdHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tlbnRpdHktZWRpdG9yXSBFcnJvcjogJyArIChlcnIgfHwgJycpKTtcbiAgICAgIHN1cGVyLnNldEVycm9yKGVyciBhcyBzdHJpbmcsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZW50aXR5LWVkaXRvcl0gRXJyb3I6ICcgKyBlcnIubWVzc2FnZSB8fCAnJywgZXJyKTtcbiAgICAgIGxldCB1c2VyTWVzc2FnZSA9IChlcnIubWVzc2FnZSAmJiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGVyci5tZXNzYWdlKSkgfHwgZXJyO1xuXG4gICAgICAvLyBBZGQgZGV0YWlscyBlcnJvciAoaWYgYW55KSB1bmRlciB0aGUgbWFpbiBtZXNzYWdlXG4gICAgICBjb25zdCBkZXRhaWxNZXNzYWdlID0gIWVyci5kZXRhaWxzIHx8IHR5cGVvZiBlcnIuZGV0YWlscyA9PT0gJ3N0cmluZycgPyAoZXJyLmRldGFpbHMgYXMgc3RyaW5nKSA6IGVyci5kZXRhaWxzLm1lc3NhZ2U7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGRldGFpbE1lc3NhZ2UpKSB7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gb3B0cz8uZGV0YWlsc0Nzc0NsYXNzIHx8ICdlcnJvci1kZXRhaWxzJztcbiAgICAgICAgdXNlck1lc3NhZ2UgKz0gYDxici8+PHNtYWxsIGNsYXNzPVwiJHtjc3NDbGFzc31cIiB0aXRsZT1cIiR7ZGV0YWlsTWVzc2FnZX1cIj5gO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSBkZXRhaWxNZXNzYWdlLmxlbmd0aCA8IDcwID8gZGV0YWlsTWVzc2FnZSA6IGRldGFpbE1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDY3KSArICcuLi4nO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSAnPC9zbWFsbD4nO1xuICAgICAgfVxuICAgICAgc3VwZXIuc2V0RXJyb3IodXNlck1lc3NhZ2UsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc25hcHNob3Qgcm91dGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGxvYWRGcm9tUm91dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgIGlmICghcm91dGUgfHwgaXNOaWxPckJsYW5rKHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBsb2FkIGZyb20gcm91dGU6IG1pc3NpbmcgJ3JvdXRlJyBvciAnb3B0aW9ucy5wYXRoSWRBdHRyaWJ1dGUnLlwiKTtcbiAgICB9XG4gICAgbGV0IGlkID0gcm91dGUucGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV07XG4gICAgaWYgKGlzTmlsKGlkKSB8fCBpZCA9PT0gJ25ldycpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQodW5kZWZpbmVkLCByb3V0ZS5wYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFzIG51bWJlciwgaWYgbmVlZFxuICAgICAgaWYgKGlzSW50KGlkKSkge1xuICAgICAgICBpZCA9IHBhcnNlSW50KGlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxvYWQoaWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB1bmRlZmluZWQgdG8ga2VlcCBzYW1lIHRhYlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgY29tcHV0ZU5leHRUYWJJbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG5leHRUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCArIDE7XG4gICAgcmV0dXJuIG5leHRUYWJJbmRleCA8IHRoaXMudGFiQ291bnQgPyBuZXh0VGFiSW5kZXggOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25CZWZvcmVFbnRpdHlMb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25OZXdFbnRpdHkoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlMb2FkZWQoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlTYXZlZChkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eURlbGV0ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVVzYWdlTW9kZShkYXRhOiBUKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc1VzYWdlTW9kZSgnRklFTEQnKSA/ICdGSUVMRCcgOiAnREVTSyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2FpdFdoaWxlUGVuZGluZyhvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcywgb3B0cyk7XG4gIH1cblxuICBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgdGhpcy5nZXRKc29uVmFsdWVUb1NhdmUoKTtcblxuICAgIGNvbnN0IHJlcyA9IG5ldyB0aGlzLmRhdGFUeXBlKCk7XG4gICAgcmVzLmZyb21PYmplY3QoanNvbik7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEpzb25WYWx1ZVRvU2F2ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB0aXRsZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVRpdGxlKGRhdGE/OiBUKSB7XG4gICAgZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5jb21wdXRlVGl0bGUoZGF0YSk7XG4gICAgdGhpcy50aXRsZVN1YmplY3QubmV4dCh0aXRsZSk7XG5cbiAgICAvLyBJZiBOT1QgZGF0YSwgdGhlbiBhZGQgdG8gcGFnZSBoaXN0b3J5XG4gICAgaWYgKCF0aGlzLmlzTmV3RGF0YSkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMuY29tcHV0ZVBhZ2VIaXN0b3J5KHRpdGxlKTtcbiAgICAgIGlmIChwYWdlKSByZXR1cm4gdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMpIHtcbiAgICBpZiAoIXBhZ2UpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM6IHRydWUsXG4gICAgICByZW1vdmVUaXRsZVNtYWxsVGFnOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY29tcHV0ZVBhZ2VIaXN0b3J5KHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPEhpc3RvcnlQYWdlUmVmZXJlbmNlPiB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdHktZWRpdG9yXSBDb21wdXRpbmcgcGFnZSBoaXN0b3J5LCB1c2luZyB1cmw6ICcgKyB0aGlzLnJvdXRlci51cmwpO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIHBhdGg6IHRoaXMucm91dGVyLnVybCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlbW92ZVBhZ2VIaXN0b3J5KHRoaXMucm91dGVyLnVybCwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVBhZ2VVcmwoaWQ6IElEIHwgJ25ldycpOiBzdHJpbmcgfCBhbnlbXSB7XG4gICAgY29uc3QgcGFyZW50VXJsID0gdGhpcy5nZXRQYXJlbnRQYWdlVXJsKCk7XG4gICAgcmV0dXJuIHBhcmVudFVybCAmJiBgJHtwYXJlbnRVcmx9LyR7aWR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYXJlbnRQYWdlVXJsKHdpdGhRdWVyeVBhcmFtcz86IGJvb2xlYW4pIHtcbiAgICBsZXQgcGFyZW50VXJsID0gdGhpcy5kZWZhdWx0QmFja0hyZWY7XG5cbiAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgaWYgKHdpdGhRdWVyeVBhcmFtcyAhPT0gdHJ1ZSAmJiBwYXJlbnRVcmwgJiYgcGFyZW50VXJsLmluZGV4T2YoJz8nKSAhPT0gLTEpIHtcbiAgICAgIHBhcmVudFVybCA9IHBhcmVudFVybC5zdWJzdHJpbmcoMCwgcGFyZW50VXJsLmluZGV4T2YoJz8nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFVybDtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0ZW5DaGFuZ2VzKGlkOiBJRCwgb3B0cz86IGFueSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmxpc3RlbkNoYW5nZXModGhpcy5kYXRhLmlkLCB7XG4gICAgICAvLyBNYWtlIHN1cmUgdG8gc2tpcCBjYWNoZSwgYmVjYXVzZSBOT1QgdGhlIGZ1bGwgZ3JhcGggd2lsbCBiZSBmZXRjaGVkIGJ5IHN1YnNjcmlwdGlvblxuICAgICAgLy8gV2hlbiBhIGNoYW5nZXMgb2NjdXIsIHdlIGNhbGwgcmVsb2FkKCkgdG8gZm9yY2UgcmVmZXRjaGluZyB0aGUgZnVsbCBncmFwaFxuICAgICAgZmV0Y2hQb2xpY3k6ICduby1jYWNoZScsXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUsIHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVSb3V0ZShkYXRhPzogVCwgcXVlcnlQYXJhbXM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBkYXRhID0gZGF0YSB8fCB0aGlzLmRhdGE7XG4gICAgaWYgKCFkYXRhIHx8ICF0aGlzLnJvdXRlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjdXJySWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCh0aGlzLnBhdGhJZEF0dHJpYnV0ZSk7XG4gICAgY29uc3QgZnV0dXJlSWQgPSBpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQudG9TdHJpbmcoKSA6ICduZXcnO1xuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB7XG4gICAgICAuLi50aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgLi4ucXVlcnlQYXJhbXMsXG4gICAgfTtcbiAgICBpZiAoY3VycklkID09PSBmdXR1cmVJZCkge1xuICAgICAgLy8gVXBkYXRlIHF1ZXJ5UGFyYW0gb25seSAobm90IHRoZSBwYXRoKVxuICAgICAgaWYgKCFlcXVhbHModGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcywgdGhpcy5xdWVyeVBhcmFtcykpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVVwZGF0aW5nIHJvdXRlIHVzaW5nIHF1ZXJ5UGFyYW1zOiBgLCBxdWVyeVBhcmFtcyk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgcmVwbGFjZVVybDogZmFsc2UsXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgc3RhdGU6IHsgYW5pbWF0ZWQ6IGZhbHNlIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXJyZW50IHJvdXRlIHdhcyAnL25ldycgPT4gY2hhbmdlIHRvICcvbmV3P2lkPTppZCcgKHRvIGFsbG93IEN1c3RvbVJldXNlU3RyYXRlZ3kgdG8gZGV0ZWN0IHRoYXQgcm91dGUgY2FuIGJlIHJldXNlZClcbiAgICAgIGlmIChjdXJySWQgPT09ICduZXcnKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1VcGRhdGluZyByb3V0ZSAvbmV3IGludG8gLzppZCwgdXNpbmcgcXVlcnlQYXJhbXM6IGAsIHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBbdGhpcy5wYXRoSWRBdHRyaWJ1dGVdOiBmdXR1cmVJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXRlOiB7IGFuaW1hdGVkOiBmYWxzZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBhZ2VVcmwoaXNOb3ROaWwoZGF0YS5pZCkgPyBkYXRhLmlkIDogJ25ldycpO1xuICAgICAgY29uc3QgY29tbWFuZHM6IGFueVtdID0gcGF0aCAmJiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyBwYXRoLnNwbGl0KCcvJykuc2xpY2UoMSkgOiAocGF0aCBhcyBhbnlbXSk7XG4gICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGNvbW1hbmRzKSkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgcm91dGUgdG86IGAgKyBwYXRoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICBzdGF0ZTogeyBhbmltYXRlZDogZmFsc2UgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcGFnZSBVUkwnKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBmaXJzdCB0YWIgdGhhdCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIG9wZW5GaXJzdEludmFsaWRUYWIoKSB7XG4gICAgY29uc3QgaW52YWxpZFRhYkluZGV4ID0gdGhpcy5nZXRGaXJzdEludmFsaWRUYWJJbmRleCgpO1xuICAgIGlmIChpbnZhbGlkVGFiSW5kZXggIT09IC0xICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCAhPT0gaW52YWxpZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpbnZhbGlkVGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBhYnN0cmFjdCBtZXRob2RzICh0byBvdmVycmlkZSkgLS0gKi9cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcHV0ZVRpdGxlKGRhdGE6IFQpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBmb3JtKCk6IEZvcm1Hcm91cDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Rmlyc3RJbnZhbGlkVGFiSW5kZXgoKTogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWdpc3RlckZvcm1zKCk6IHZvaWQ7XG5cbiAgYWJzdHJhY3Qgc2V0VmFsdWUoZGF0YTogVCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cbiJdfQ==
@@ -107,13 +107,7 @@ export class AppTabEditor extends AppEditor {
107
107
  if (queryTabIndexParamName === 'tab' && isNotNil(this.queryParams['subtab'])) {
108
108
  delete this.queryParams.subtab; // clean subtab
109
109
  }
110
- // Update queryParam only (not the path)
111
- this.router.navigate(['.'], {
112
- relativeTo: this.route,
113
- replaceUrl: false, // Avoid to change the URL (e.g. to avoid restoring '/:id' by '/new' if changed silently)
114
- queryParams: this.queryParams,
115
- state: { animated: false },
116
- });
110
+ this.updateRoute();
117
111
  return true;
118
112
  }
119
113
  return false;
@@ -163,6 +157,15 @@ export class AppTabEditor extends AppEditor {
163
157
  this.selectedTabIndex = 0;
164
158
  await super.unload(opts);
165
159
  }
160
+ async updateRoute() {
161
+ if (!this.route)
162
+ return false; // Skip if no route (e.g. in modal)
163
+ return this.router.navigate(['.'], {
164
+ relativeTo: this.route,
165
+ queryParams: this.queryParams,
166
+ state: { animated: false },
167
+ });
168
+ }
166
169
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppTabEditor, deps: [{ token: i1.ActivatedRoute, optional: true }, { token: i1.Router }, { token: i2.NavController }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: AppTabEditorOptions, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
167
170
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: AppTabEditor, inputs: { queryTabIndexParamName: "queryTabIndexParamName", selectedTabIndex: "selectedTabIndex" }, outputs: { selectedTabIndexChange: "selectedTabIndexChange" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabGroup"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
168
171
  }
@@ -182,4 +185,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
182
185
  type: ViewChild,
183
186
  args: ['tabGroup', { static: true }]
184
187
  }] } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS90YWItZWRpdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNL0csT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBU3ZELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7O09BRUc7SUFDSCxRQUFRLENBQVU7SUFFbEI7O09BRUc7SUFDSCx5QkFBeUIsQ0FBVTtJQUVuQzs7T0FFRztJQUNILFdBQVcsQ0FBVyxDQUFDLGtCQUFrQjtDQUMxQztBQUdELGtFQUFrRTtBQUNsRSxNQUFNLE9BQWdCLFlBQTRDLFNBQVEsU0FBbUI7SUFDakYsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBRWhDLGlCQUFpQjtJQUNQLFFBQVEsQ0FBUztJQUNqQixXQUFXLENBQVU7SUFDckIseUJBQXlCLENBQVM7SUFFbkMsc0JBQXNCLENBQVM7SUFFeEMsSUFBYSxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVrQixzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTlCLFFBQVEsQ0FBYztJQUUvRCxZQUNjLEtBQXFCLEVBQUUsMkJBQTJCO0lBQzlELE1BQWMsRUFDZCxhQUE0QixFQUM1QixTQUEwQixFQUMxQixTQUEy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ZixjQUFjLEdBQUcsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztnQkFDMUUsTUFBTTtZQUVSLGFBQWE7WUFDYjtnQkFDRSxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEUsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUF3QjtRQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUE4QjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO3dHQWxMbUIsWUFBWTs0RkFBWixZQUFZOzs0RkFBWixZQUFZO2tCQUZqQyxTQUFTOzswQkF3QkwsUUFBUTs7MEJBS1IsUUFBUTt5Q0FuQkYsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFPYSxzQkFBc0I7c0JBQXhDLE1BQU07Z0JBRWtDLFFBQVE7c0JBQWhELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEhhbW1lclN3aXBlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZ2VzdHVyZS9oYW1tZXIudXRpbHMnO1xuaW1wb3J0IHsgaXNOb3ROaWwsIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBBcHBFZGl0b3IsIElBcHBFZGl0b3IgfSBmcm9tICcuL2VkaXRvci5jbGFzcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcFRhYkVkaXRvcjxUID0gYW55PiBleHRlbmRzIElBcHBFZGl0b3I8VD4ge1xuICBzZWxlY3RlZFRhYkluZGV4OiBudW1iZXI7XG4gIHNldFNlbGVjdGVkVGFiSW5kZXgodmFsdWU6IG51bWJlciwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVhbGlnbklua0Jhcj86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIHVubG9hZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+O1xuICByZWFsaWduSW5rQmFyKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBUYWJFZGl0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiB0YWIuIDEgYnkgZGVmYXVsdFxuICAgKi9cbiAgdGFiQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqICcyMDBtcycgYnkgZGVmYXVsdFxuICAgKi9cbiAgdGFiR3JvdXBBbmltYXRpb25EdXJhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogU2hvdWxkIGVuYWJsZSBzd2lwZSBiZXR3ZWVuIHRhYiwgb24gdG91Y2ggc2NyZWVuXG4gICAqL1xuICBlbmFibGVTd2lwZT86IGJvb2xlYW47IC8vIHRydWUgYnkgZGVmYXVsdFxufVxuXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcFRhYkVkaXRvcjxUID0gYW55LCBJRCA9IG51bWJlciwgTyA9IGFueT4gZXh0ZW5kcyBBcHBFZGl0b3I8VCwgSUQsIE8+IGltcGxlbWVudHMgSUFwcFRhYkVkaXRvcjxUPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgX3NlbGVjdGVkVGFiSW5kZXggPSAwO1xuXG4gIC8vIEVkaXRvciBvcHRpb25zXG4gIHByb3RlY3RlZCB0YWJDb3VudDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZW5hYmxlU3dpcGU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCB0YWJHcm91cEFuaW1hdGlvbkR1cmF0aW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgcXVlcnlUYWJJbmRleFBhcmFtTmFtZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkVGFiSW5kZXgodmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZFRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXg7XG4gIH1cblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ZWRUYWJJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYkdyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgdGFiR3JvdXA6IE1hdFRhYkdyb3VwO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIC8vIE1vZGFsIGVkaXRvciBnaXZlICdudWxsJ1xuICAgIHJvdXRlcjogUm91dGVyLFxuICAgIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgYWxlcnRDdHJsOiBBbGVydENvbnRyb2xsZXIsXG4gICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIG9wdGlvbnM/OiBBcHBUYWJFZGl0b3JPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIG5hdkNvbnRyb2xsZXIsIGFsZXJ0Q3RybCwgdHJhbnNsYXRlKTtcbiAgICBvcHRpb25zID0ge1xuICAgICAgdGFiQ291bnQ6IDEsXG4gICAgICBlbmFibGVTd2lwZTogdHJ1ZSxcbiAgICAgIHRhYkdyb3VwQW5pbWF0aW9uRHVyYXRpb246ICcyMDBtcycsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gICAgdGhpcy50YWJDb3VudCA9IG9wdGlvbnMudGFiQ291bnQ7XG4gICAgdGhpcy5lbmFibGVTd2lwZSA9IG9wdGlvbnMuZW5hYmxlU3dpcGU7XG4gICAgdGhpcy50YWJHcm91cEFuaW1hdGlvbkR1cmF0aW9uID0gb3B0aW9ucy50YWJHcm91cEFuaW1hdGlvbkR1cmF0aW9uO1xuICAgIHRoaXMucXVlcnlUYWJJbmRleFBhcmFtTmFtZSA9ICd0YWInO1xuICAgIHRoaXMuX2xvZ1ByZWZpeCA9ICdbdGFiLWVkaXRvcl0gJztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBSZWFkIHRoZSBzZWxlY3RlZCB0YWIgaW5kZXgsIGZyb20gcGF0aCBxdWVyeSBwYXJhbXNcbiAgICBpZiAodGhpcy50YWJHcm91cCAmJiB0aGlzLnJvdXRlICYmIHRoaXMucXVlcnlUYWJJbmRleFBhcmFtTmFtZSkge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHF1ZXJ5UGFyYW1zKSA9PiB7XG4gICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHsgLi4ucXVlcnlQYXJhbXMgfTtcblxuICAgICAgICAgIC8vIFBhcnNlIHRhYiBwYXJhbVxuICAgICAgICAgIGlmICh0aGlzLnRhYkNvdW50ID4gMSAmJiB0aGlzLnF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYkluZGV4ID0gdG9OdW1iZXIocXVlcnlQYXJhbXNbdGhpcy5xdWVyeVRhYkluZGV4UGFyYW1OYW1lXSwgMCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zW3RoaXMucXVlcnlUYWJJbmRleFBhcmFtTmFtZV0gPSB0YWJJbmRleCAhPT0gMCA/IHRhYkluZGV4IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCAhPT0gdGFiSW5kZXgpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUmVhbGlnbiB0YWIsIGFmdGVyIGEgZGVsYXkgYmVjYXVzZSB0aGUgdGFiIGNhbiBiZSBkaXNhYmxlZCB3aGVuIGNvbXBvbmVudCBpcyBjcmVhdGVkXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRhYkdyb3VwLnJlYWxpZ25JbmtCYXIoKSwgNTAwKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXhDaGFuZ2UuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkVGFiSW5kZXgodmFsdWU6IG51bWJlciwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVhbGlnbklua0Jhcj86IGJvb2xlYW4gfSkge1xuICAgIC8vIEZpeCB2YWx1ZVxuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID4gdGhpcy50YWJDb3VudCAtIDEpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW3RhYi1lZGl0b3JdIEludmFsaWQgdGFiIGluZGV4ICR7dmFsdWV9LiBNYXggdmFsdWUgaXMgJHt0aGlzLnRhYkNvdW50IC0gMX1gKTtcbiAgICAgIHZhbHVlID0gdGhpcy5fc2VsZWN0ZWRUYWJJbmRleDtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4Q2hhbmdlLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMudGFiR3JvdXAgJiYgKCFvcHRzIHx8IG9wdHMucmVhbGlnbklua0JhciAhPT0gZmFsc2UpKSB7XG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSB2YWx1ZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAvLyBXYWl0IHRhYiBjaGFuZ2UgaW4gVUksIGJlZm9yZSByZWFsaWduIGluayB0YWJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50YWJHcm91cC5yZWFsaWduSW5rQmFyKCksIDIwMCk7XG4gICAgfSBlbHNlIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcmVhbGlnbklua0JhcigpIHtcbiAgICB0aGlzLnRhYkdyb3VwPy5yZWFsaWduSW5rQmFyKCk7XG4gIH1cblxuICBvblRhYkNoYW5nZShldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQsIHF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBxdWVyeVRhYkluZGV4UGFyYW1OYW1lID0gcXVlcnlUYWJJbmRleFBhcmFtTmFtZSB8fCB0aGlzLnF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWU7XG5cbiAgICBpZiAoIXF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWUgfHwgIXRoaXMucm91dGUpIHJldHVybiB0cnVlOyAvLyBTa2lwIGlmIHRhYiBxdWVyeSBwYXJhbSBub3Qgc2V0LCBvciBubyByb3V0ZVxuXG4gICAgaWYgKCF0aGlzLnF1ZXJ5UGFyYW1zIHx8ICt0aGlzLnF1ZXJ5UGFyYW1zW3F1ZXJ5VGFiSW5kZXhQYXJhbU5hbWVdICE9PSBldmVudC5pbmRleCkge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXMgfHwge307XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zW3F1ZXJ5VGFiSW5kZXhQYXJhbU5hbWVdID0gZXZlbnQuaW5kZXggIT09IDAgPyBldmVudC5pbmRleCA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWUgPT09ICd0YWInICYmIGlzTm90TmlsKHRoaXMucXVlcnlQYXJhbXNbJ3N1YnRhYiddKSkge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyeVBhcmFtcy5zdWJ0YWI7IC8vIGNsZWFuIHN1YnRhYlxuICAgICAgfVxuICAgICAgLy8gVXBkYXRlIHF1ZXJ5UGFyYW0gb25seSAobm90IHRoZSBwYXRoKVxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcmVwbGFjZVVybDogZmFsc2UsIC8vIEF2b2lkIHRvIGNoYW5nZSB0aGUgVVJMIChlLmcuIHRvIGF2b2lkIHJlc3RvcmluZyAnLzppZCcgYnkgJy9uZXcnIGlmIGNoYW5nZWQgc2lsZW50bHkpXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICBzdGF0ZTogeyBhbmltYXRlZDogZmFsc2UgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3Rpb24gdHJpZ2dlcmVkIHdoZW4gdXNlciBzd2lwZXNcbiAgICovXG4gIG9uU3dpcGVUYWIoZXZlbnQ6IEhhbW1lclN3aXBlRXZlbnQpOiBib29sZWFuIHtcbiAgICAvLyBERUJVR1xuICAgIC8vIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiW3RhYi1wYWdlXSBvblN3aXBlVGFiKClcIik7XG5cbiAgICAvLyBTa2lwLCBpZiBub3QgYSB2YWxpZCBzd2lwZSBldmVudFxuICAgIGlmIChcbiAgICAgICF0aGlzLmVuYWJsZVN3aXBlIHx8XG4gICAgICAhZXZlbnQgfHxcbiAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHxcbiAgICAgIChldmVudC5zcmNFdmVudCAmJiBldmVudC5zcmNFdmVudC5kZWZhdWx0UHJldmVudGVkKSB8fFxuICAgICAgZXZlbnQucG9pbnRlclR5cGUgIT09ICd0b3VjaCdcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW3RhYi1wYWdlXSBEZXRlY3RlZCBzd2lwZTogXCIgKyBldmVudC50eXBlLCBldmVudCk7XG5cbiAgICBsZXQgc2VsZWN0VGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXg7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAvLyBPcGVuIG5leHQgdGFiXG4gICAgICBjYXNlICdzd2lwZWxlZnQnOlxuICAgICAgICBzZWxlY3RUYWJJbmRleCA9IHNlbGVjdFRhYkluZGV4ID49IHRoaXMudGFiQ291bnQgLSAxID8gMCA6IHNlbGVjdFRhYkluZGV4ICsgMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIE9wZW4gcHJldmlvdXMgdGFiXG4gICAgICBjYXNlICdzd2lwZXJpZ2h0JzpcbiAgICAgICAgc2VsZWN0VGFiSW5kZXggPSBzZWxlY3RUYWJJbmRleCA8PSAwID8gdGhpcy50YWJDb3VudCA6IHNlbGVjdFRhYkluZGV4IC0gMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIE90aGVyIGNhc2VcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0YWItcGFnZV0gVW5rbm93biBzd2lwZSBhY3Rpb246ICcgKyBldmVudC50eXBlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gc2VsZWN0VGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvblN1YlRhYkNoYW5nZShldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLm9uVGFiQ2hhbmdlKGV2ZW50LCAnc3VidGFiJyk7XG4gIH1cblxuICBhc3luYyB1bmxvYWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICBhd2FpdCBzdXBlci51bmxvYWQob3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Rmlyc3RJbnZhbGlkVGFiSW5kZXgoKTogbnVtYmVyO1xufVxuIl19
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS90YWItZWRpdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNL0csT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBU3ZELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7O09BRUc7SUFDSCxRQUFRLENBQVU7SUFFbEI7O09BRUc7SUFDSCx5QkFBeUIsQ0FBVTtJQUVuQzs7T0FFRztJQUNILFdBQVcsQ0FBVyxDQUFDLGtCQUFrQjtDQUMxQztBQUdELGtFQUFrRTtBQUNsRSxNQUFNLE9BQWdCLFlBQTRDLFNBQVEsU0FBbUI7SUFDakYsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBRWhDLGlCQUFpQjtJQUNQLFFBQVEsQ0FBUztJQUNqQixXQUFXLENBQVU7SUFDckIseUJBQXlCLENBQVM7SUFFbkMsc0JBQXNCLENBQVM7SUFFeEMsSUFBYSxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVrQixzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTlCLFFBQVEsQ0FBYztJQUUvRCxZQUNjLEtBQXFCLEVBQUUsMkJBQTJCO0lBQzlELE1BQWMsRUFDZCxhQUE0QixFQUM1QixTQUEwQixFQUMxQixTQUEy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LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50LCBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSGFtbWVyU3dpcGVFdmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9nZXN0dXJlL2hhbW1lci51dGlscyc7XG5pbXBvcnQgeyBpc05vdE5pbCwgdG9OdW1iZXIgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEFwcEVkaXRvciwgSUFwcEVkaXRvciB9IGZyb20gJy4vZWRpdG9yLmNsYXNzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQXBwVGFiRWRpdG9yPFQgPSBhbnk+IGV4dGVuZHMgSUFwcEVkaXRvcjxUPiB7XG4gIHNlbGVjdGVkVGFiSW5kZXg6IG51bWJlcjtcbiAgc2V0U2VsZWN0ZWRUYWJJbmRleCh2YWx1ZTogbnVtYmVyLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZWFsaWduSW5rQmFyPzogYm9vbGVhbiB9KTogdm9pZDtcbiAgdW5sb2FkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD47XG4gIHJlYWxpZ25JbmtCYXIoKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcFRhYkVkaXRvck9wdGlvbnMge1xuICAvKipcbiAgICogTnVtYmVyIG9mIHRhYi4gMSBieSBkZWZhdWx0XG4gICAqL1xuICB0YWJDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogJzIwMG1zJyBieSBkZWZhdWx0XG4gICAqL1xuICB0YWJHcm91cEFuaW1hdGlvbkR1cmF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgZW5hYmxlIHN3aXBlIGJldHdlZW4gdGFiLCBvbiB0b3VjaCBzY3JlZW5cbiAgICovXG4gIGVuYWJsZVN3aXBlPzogYm9vbGVhbjsgLy8gdHJ1ZSBieSBkZWZhdWx0XG59XG5cbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVGFiRWRpdG9yPFQgPSBhbnksIElEID0gbnVtYmVyLCBPID0gYW55PiBleHRlbmRzIEFwcEVkaXRvcjxULCBJRCwgTz4gaW1wbGVtZW50cyBJQXBwVGFiRWRpdG9yPFQ+LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBfc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG5cbiAgLy8gRWRpdG9yIG9wdGlvbnNcbiAgcHJvdGVjdGVkIHRhYkNvdW50OiBudW1iZXI7XG4gIHByb3RlY3RlZCBlbmFibGVTd2lwZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHRhYkdyb3VwQW5pbWF0aW9uRHVyYXRpb246IHN0cmluZztcblxuICBASW5wdXQoKSBxdWVyeVRhYkluZGV4UGFyYW1OYW1lOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2V0IHNlbGVjdGVkVGFiSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRUYWJJbmRleCh2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkVGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJJbmRleDtcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZFRhYkluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgQFZpZXdDaGlsZCgndGFiR3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgLy8gTW9kYWwgZWRpdG9yIGdpdmUgJ251bGwnXG4gICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcixcbiAgICBhbGVydEN0cmw6IEFsZXJ0Q29udHJvbGxlcixcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgb3B0aW9ucz86IEFwcFRhYkVkaXRvck9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIocm91dGUsIHJvdXRlciwgbmF2Q29udHJvbGxlciwgYWxlcnRDdHJsLCB0cmFuc2xhdGUpO1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICB0YWJDb3VudDogMSxcbiAgICAgIGVuYWJsZVN3aXBlOiB0cnVlLFxuICAgICAgdGFiR3JvdXBBbmltYXRpb25EdXJhdGlvbjogJzIwMG1zJyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbiAgICB0aGlzLnRhYkNvdW50ID0gb3B0aW9ucy50YWJDb3VudDtcbiAgICB0aGlzLmVuYWJsZVN3aXBlID0gb3B0aW9ucy5lbmFibGVTd2lwZTtcbiAgICB0aGlzLnRhYkdyb3VwQW5pbWF0aW9uRHVyYXRpb24gPSBvcHRpb25zLnRhYkdyb3VwQW5pbWF0aW9uRHVyYXRpb247XG4gICAgdGhpcy5xdWVyeVRhYkluZGV4UGFyYW1OYW1lID0gJ3RhYic7XG4gICAgdGhpcy5fbG9nUHJlZml4ID0gJ1t0YWItZWRpdG9yXSAnO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIFJlYWQgdGhlIHNlbGVjdGVkIHRhYiBpbmRleCwgZnJvbSBwYXRoIHF1ZXJ5IHBhcmFtc1xuICAgIGlmICh0aGlzLnRhYkdyb3VwICYmIHRoaXMucm91dGUgJiYgdGhpcy5xdWVyeVRhYkluZGV4UGFyYW1OYW1lKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocXVlcnlQYXJhbXMpID0+IHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0geyAuLi5xdWVyeVBhcmFtcyB9O1xuXG4gICAgICAgICAgLy8gUGFyc2UgdGFiIHBhcmFtXG4gICAgICAgICAgaWYgKHRoaXMudGFiQ291bnQgPiAxICYmIHRoaXMucXVlcnlUYWJJbmRleFBhcmFtTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgdGFiSW5kZXggPSB0b051bWJlcihxdWVyeVBhcmFtc1t0aGlzLnF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWVdLCAwKTtcbiAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXNbdGhpcy5xdWVyeVRhYkluZGV4UGFyYW1OYW1lXSA9IHRhYkluZGV4ICE9PSAwID8gdGFiSW5kZXggOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ICE9PSB0YWJJbmRleCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0YWJJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZWFsaWduIHRhYiwgYWZ0ZXIgYSBkZWxheSBiZWNhdXNlIHRoZSB0YWIgY2FuIGJlIGRpc2FibGVkIHdoZW4gY29tcG9uZW50IGlzIGNyZWF0ZWRcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudGFiR3JvdXAucmVhbGlnbklua0JhcigpLCA1MDApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleENoYW5nZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRUYWJJbmRleCh2YWx1ZTogbnVtYmVyLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZWFsaWduSW5rQmFyPzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRml4IHZhbHVlXG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgdmFsdWUgPSAwO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPiB0aGlzLnRhYkNvdW50IC0gMSkge1xuICAgICAgY29uc29sZS53YXJuKGBbdGFiLWVkaXRvcl0gSW52YWxpZCB0YWIgaW5kZXggJHt2YWx1ZX0uIE1heCB2YWx1ZSBpcyAke3RoaXMudGFiQ291bnQgLSAxfWApO1xuICAgICAgdmFsdWUgPSB0aGlzLl9zZWxlY3RlZFRhYkluZGV4O1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPSB2YWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXhDaGFuZ2UubmV4dCh2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy50YWJHcm91cCAmJiAoIW9wdHMgfHwgb3B0cy5yZWFsaWduSW5rQmFyICE9PSBmYWxzZSkpIHtcbiAgICAgIHRoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9IHZhbHVlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIC8vIFdhaXQgdGFiIGNoYW5nZSBpbiBVSSwgYmVmb3JlIHJlYWxpZ24gaW5rIHRhYlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRhYkdyb3VwLnJlYWxpZ25JbmtCYXIoKSwgMjAwKTtcbiAgICB9IGVsc2UgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICByZWFsaWduSW5rQmFyKCkge1xuICAgIHRoaXMudGFiR3JvdXA/LnJlYWxpZ25JbmtCYXIoKTtcbiAgfVxuXG4gIG9uVGFiQ2hhbmdlKGV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCwgcXVlcnlUYWJJbmRleFBhcmFtTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHF1ZXJ5VGFiSW5kZXhQYXJhbU5hbWUgPSBxdWVyeVRhYkluZGV4UGFyYW1OYW1lIHx8IHRoaXMucXVlcnlUYWJJbmRleFBhcmFtTmFtZTtcblxuICAgIGlmICghcXVlcnlUYWJJbmRleFBhcmFtTmFtZSB8fCAhdGhpcy5yb3V0ZSkgcmV0dXJuIHRydWU7IC8vIFNraXAgaWYgdGFiIHF1ZXJ5IHBhcmFtIG5vdCBzZXQsIG9yIG5vIHJvdXRlXG5cbiAgICBpZiAoIXRoaXMucXVlcnlQYXJhbXMgfHwgK3RoaXMucXVlcnlQYXJhbXNbcXVlcnlUYWJJbmRleFBhcmFtTmFtZV0gIT09IGV2ZW50LmluZGV4KSB7XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtcyB8fCB7fTtcbiAgICAgIHRoaXMucXVlcnlQYXJhbXNbcXVlcnlUYWJJbmRleFBhcmFtTmFtZV0gPSBldmVudC5pbmRleCAhPT0gMCA/IGV2ZW50LmluZGV4IDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAocXVlcnlUYWJJbmRleFBhcmFtTmFtZSA9PT0gJ3RhYicgJiYgaXNOb3ROaWwodGhpcy5xdWVyeVBhcmFtc1snc3VidGFiJ10pKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnF1ZXJ5UGFyYW1zLnN1YnRhYjsgLy8gY2xlYW4gc3VidGFiXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVJvdXRlKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGlvbiB0cmlnZ2VyZWQgd2hlbiB1c2VyIHN3aXBlc1xuICAgKi9cbiAgb25Td2lwZVRhYihldmVudDogSGFtbWVyU3dpcGVFdmVudCk6IGJvb2xlYW4ge1xuICAgIC8vIERFQlVHXG4gICAgLy8gaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoXCJbdGFiLXBhZ2VdIG9uU3dpcGVUYWIoKVwiKTtcblxuICAgIC8vIFNraXAsIGlmIG5vdCBhIHZhbGlkIHN3aXBlIGV2ZW50XG4gICAgaWYgKFxuICAgICAgIXRoaXMuZW5hYmxlU3dpcGUgfHxcbiAgICAgICFldmVudCB8fFxuICAgICAgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fFxuICAgICAgKGV2ZW50LnNyY0V2ZW50ICYmIGV2ZW50LnNyY0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHx8XG4gICAgICBldmVudC5wb2ludGVyVHlwZSAhPT0gJ3RvdWNoJ1xuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZylcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbdGFiLXBhZ2VdIERldGVjdGVkIHN3aXBlOiBcIiArIGV2ZW50LnR5cGUsIGV2ZW50KTtcblxuICAgIGxldCBzZWxlY3RUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleDtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIC8vIE9wZW4gbmV4dCB0YWJcbiAgICAgIGNhc2UgJ3N3aXBlbGVmdCc6XG4gICAgICAgIHNlbGVjdFRhYkluZGV4ID0gc2VsZWN0VGFiSW5kZXggPj0gdGhpcy50YWJDb3VudCAtIDEgPyAwIDogc2VsZWN0VGFiSW5kZXggKyAxO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gT3BlbiBwcmV2aW91cyB0YWJcbiAgICAgIGNhc2UgJ3N3aXBlcmlnaHQnOlxuICAgICAgICBzZWxlY3RUYWJJbmRleCA9IHNlbGVjdFRhYkluZGV4IDw9IDAgPyB0aGlzLnRhYkNvdW50IDogc2VsZWN0VGFiSW5kZXggLSAxO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gT3RoZXIgY2FzZVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5lcnJvcignW3RhYi1wYWdlXSBVbmtub3duIHN3aXBlIGFjdGlvbjogJyArIGV2ZW50LnR5cGUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBzZWxlY3RUYWJJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG9uU3ViVGFiQ2hhbmdlKGV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCkge1xuICAgIHRoaXMub25UYWJDaGFuZ2UoZXZlbnQsICdzdWJ0YWInKTtcbiAgfVxuXG4gIGFzeW5jIHVubG9hZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgIGF3YWl0IHN1cGVyLnVubG9hZChvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Rmlyc3RJbnZhbGlkVGFiSW5kZXgoKTogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVSb3V0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMucm91dGUpIHJldHVybiBmYWxzZTsgLy8gU2tpcCBpZiBubyByb3V0ZSAoZS5nLiBpbiBtb2RhbClcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgIHN0YXRlOiB7IGFuaW1hdGVkOiBmYWxzZSB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Directive, Pipe, Injectable, EventEmitter, Output, Optional, Inject, inject, NgModule, forwardRef, Component, ChangeDetectionStrategy, Input, ViewChildren, HostBinding, HostListener, ElementRef, booleanAttribute, numberAttribute, ViewChild, ANIMATION_MODULE_TYPE, RendererStyleFlags2, CUSTOM_ELEMENTS_SCHEMA, ViewEncapsulation, APP_INITIALIZER, ChangeDetectorRef } from '@angular/core';
3
3
  import { firstValueFrom, shareReplay, tap, of, timer, Subject, merge, delay, isObservable, from, Subscription, BehaviorSubject, fromEvent, noop as noop$a, Observable, forkJoin, defer, timeout, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, fromEventPattern, interval, combineLatest, EMPTY, switchMap as switchMap$1 } from 'rxjs';
4
- import { catchError, map, filter, takeUntil, first, switchMap, tap as tap$1, debounceTime, startWith, throttleTime, distinctUntilChanged, mergeMap, skip, finalize, bufferWhen, mapTo, distinctUntilKeyChanged, take } from 'rxjs/operators';
4
+ import { catchError, map, filter, takeUntil, first, switchMap, tap as tap$1, debounceTime, startWith, throttleTime, distinctUntilChanged, mergeMap, skip, finalize, bufferWhen, distinctUntilKeyChanged, take } from 'rxjs/operators';
5
5
  import * as i3 from '@angular/common';
6
6
  import { CommonModule, DOCUMENT, Location } from '@angular/common';
7
7
  import { CdkTableModule } from '@angular/cdk/table';
@@ -37168,13 +37168,7 @@ class AppTabEditor extends AppEditor {
37168
37168
  if (queryTabIndexParamName === 'tab' && isNotNil(this.queryParams['subtab'])) {
37169
37169
  delete this.queryParams.subtab; // clean subtab
37170
37170
  }
37171
- // Update queryParam only (not the path)
37172
- this.router.navigate(['.'], {
37173
- relativeTo: this.route,
37174
- replaceUrl: false, // Avoid to change the URL (e.g. to avoid restoring '/:id' by '/new' if changed silently)
37175
- queryParams: this.queryParams,
37176
- state: { animated: false },
37177
- });
37171
+ this.updateRoute();
37178
37172
  return true;
37179
37173
  }
37180
37174
  return false;
@@ -37224,6 +37218,15 @@ class AppTabEditor extends AppEditor {
37224
37218
  this.selectedTabIndex = 0;
37225
37219
  await super.unload(opts);
37226
37220
  }
37221
+ async updateRoute() {
37222
+ if (!this.route)
37223
+ return false; // Skip if no route (e.g. in modal)
37224
+ return this.router.navigate(['.'], {
37225
+ relativeTo: this.route,
37226
+ queryParams: this.queryParams,
37227
+ state: { animated: false },
37228
+ });
37229
+ }
37227
37230
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppTabEditor, deps: [{ token: i1$5.ActivatedRoute, optional: true }, { token: i1$5.Router }, { token: i2$1.NavController }, { token: i2$1.AlertController }, { token: i1$1.TranslateService }, { token: AppTabEditorOptions, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
37228
37231
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: AppTabEditor, inputs: { queryTabIndexParamName: "queryTabIndexParamName", selectedTabIndex: "selectedTabIndex" }, outputs: { selectedTabIndexChange: "selectedTabIndexChange" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabGroup"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
37229
37232
  }
@@ -38875,7 +38878,7 @@ class AppEntityEditor extends AppTabEditor {
38875
38878
  })
38876
38879
  ?.pipe(filter(isNotNil), mergeMap((data) => this.saving
38877
38880
  ? // If saving, wait end, to avoid to detect self changes
38878
- firstFalse(this.savingSubject).pipe(mapTo(data), debounceTime(500))
38881
+ firstFalse(this.savingSubject).pipe(map(() => data), debounceTime(500))
38879
38882
  : of(data)))
38880
38883
  .subscribe((data) => {
38881
38884
  const isNewer = isMoment(data.updateDate) && (!this.data.updateDate || data.updateDate.isAfter(this.data.updateDate));
@@ -39310,6 +39313,9 @@ class AppEntityEditor extends AppTabEditor {
39310
39313
  * @protected
39311
39314
  */
39312
39315
  async updateRoute(data, queryParams) {
39316
+ data = data || this.data;
39317
+ if (!data || !this.route)
39318
+ return false;
39313
39319
  const currId = this.route.snapshot.paramMap.get(this.pathIdAttribute);
39314
39320
  const futureId = isNotNil(data.id) ? data.id.toString() : 'new';
39315
39321
  this.queryParams = {
@@ -39320,7 +39326,7 @@ class AppEntityEditor extends AppTabEditor {
39320
39326
  // Update queryParam only (not the path)
39321
39327
  if (!equals(this.route.snapshot.queryParams, this.queryParams)) {
39322
39328
  if (this.debug)
39323
- console.debug('[entity-editor] Updating route using queryParams: ', queryParams);
39329
+ console.debug(`${this._logPrefix}Updating route using queryParams: `, queryParams);
39324
39330
  return await this.router.navigate(['.'], {
39325
39331
  relativeTo: this.route,
39326
39332
  replaceUrl: false,
@@ -39333,7 +39339,7 @@ class AppEntityEditor extends AppTabEditor {
39333
39339
  // Current route was '/new' => change to '/new?id=:id' (to allow CustomReuseStrategy to detect that route can be reused)
39334
39340
  if (currId === 'new') {
39335
39341
  if (this.debug)
39336
- console.debug('[entity-editor] Updating route /new into /:id, using queryParams: ', queryParams);
39342
+ console.debug(`${this._logPrefix}Updating route /new into /:id, using queryParams: `, queryParams);
39337
39343
  const res = await this.router.navigate(['.'], {
39338
39344
  relativeTo: this.route,
39339
39345
  replaceUrl: true,
@@ -39350,7 +39356,7 @@ class AppEntityEditor extends AppTabEditor {
39350
39356
  const commands = path && typeof path === 'string' ? path.split('/').slice(1) : path;
39351
39357
  if (isNotEmptyArray(commands)) {
39352
39358
  if (this.debug)
39353
- console.debug('[entity-editor] Updating route to: ' + path);
39359
+ console.debug(`${this._logPrefix}Updating route to: ` + path);
39354
39360
  return await this.router.navigate(commands, {
39355
39361
  replaceUrl: true,
39356
39362
  queryParams: this.queryParams,