@yuuvis/client-shell-core 2.3.11 → 2.3.13

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.
@@ -3,12 +3,12 @@ import { inject, Injectable, signal } from '@angular/core';
3
3
  import { MatDialog } from '@angular/material/dialog';
4
4
  import { MatIconRegistry } from '@angular/material/icon';
5
5
  import { DomSanitizer } from '@angular/platform-browser';
6
+ import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
6
7
  import { ApiBase, BaseObjectTypeField, ConfigService, DmsService, SystemService, SystemType, TranslateService, UserService, Utils } from '@yuuvis/client-core';
7
8
  import { BehaviorSubject, debounceTime, filter, first, firstValueFrom, fromEvent, map, of, tap } from 'rxjs';
8
9
  import { CLIENT_SHELL_ASSETS } from '../../client-shell.assets';
9
10
  import { SHELL_CONFIG_TYPES } from '../shell-config/shell-config.const';
10
11
  import { ShellConfigService } from '../shell-config/shell-config.service';
11
- import { NavigationEnd, Router } from '@angular/router';
12
12
  import * as i0 from "@angular/core";
13
13
  export class ShellService {
14
14
  #dmsService;
@@ -22,6 +22,7 @@ export class ShellService {
22
22
  #configService;
23
23
  #sanitizer;
24
24
  #router;
25
+ #route;
25
26
  #DOCUMENT;
26
27
  // Apps can register their own setting components to be shown in shell settings
27
28
  #appSettings;
@@ -38,6 +39,7 @@ export class ShellService {
38
39
  this.#configService = inject(ConfigService);
39
40
  this.#sanitizer = inject(DomSanitizer);
40
41
  this.#router = inject(Router);
42
+ this.#route = inject(ActivatedRoute);
41
43
  this.#DOCUMENT = inject(DOCUMENT);
42
44
  this.translate = inject(TranslateService);
43
45
  this._busyCount = 0;
@@ -76,19 +78,22 @@ export class ShellService {
76
78
  // track open dialogs in an auxillary route to support closing them on back navigation
77
79
  // as this is the expected behaviour on mobile devices
78
80
  this.#dialog.afterOpened.subscribe((ref) => {
79
- (this.#router.navigate([{ outlets: { dt: ['dialogs', this.#dialog.openDialogs.map((d, i) => i).join('-')] } }]), [{ replaceUrl: true }]);
81
+ this.#router.navigate([{ outlets: { dt: ['dialogs', this.#dialog.openDialogs.map((d, i) => i).join('-')] } }], {
82
+ // replaceUrl: true,
83
+ queryParamsHandling: 'preserve'
84
+ });
80
85
  ref.afterClosed().subscribe((res) => {
81
86
  if (res?.closedByRoute)
82
87
  return;
83
88
  const openDialogs = this.#dialog.openDialogs.filter((d) => d.id !== ref.id);
84
89
  // having no open dialogs, clear the auxillary route
85
90
  const param = openDialogs.length > 0 ? ['dialogs', openDialogs.map((d, i) => i).join('-')] : null;
86
- this.#router.navigate([{ outlets: { dt: param } }], { replaceUrl: true });
91
+ this.#router.navigate([{ outlets: { dt: param } }], { replaceUrl: true, queryParamsHandling: 'preserve' });
87
92
  });
88
93
  });
89
94
  this.#router.events.pipe(filter((e) => e instanceof NavigationEnd)).subscribe((e) => {
90
- if (this.#dialog.openDialogs.length === 0) {
91
- this.#router.navigate([{ outlets: { dt: null } }], { replaceUrl: true });
95
+ if (this.#dialog.openDialogs.length === 0 && e.urlAfterRedirects.match(/(dt:[.]*)/)) {
96
+ this.#router.navigate([{ outlets: { dt: null } }], { replaceUrl: true, queryParamsHandling: 'preserve' });
92
97
  }
93
98
  });
94
99
  }
@@ -237,7 +242,11 @@ export class ShellService {
237
242
  * @param app Optional ID of the app that exposes the flavor (defaults to 'global' if not provided)
238
243
  */
239
244
  concealObjectFlavor(flavor, app = 'global') {
240
- this._objectFlavors = this._objectFlavors.filter((f) => f.id !== flavor.id && f.app !== app);
245
+ this._objectFlavors = this._objectFlavors.filter((f) => {
246
+ const hasSameId = f.id === flavor.id;
247
+ const isFromSameApp = f.app === app;
248
+ return hasSameId && isFromSameApp ? false : true;
249
+ });
241
250
  }
242
251
  /**
243
252
  * Get registered object flavors
@@ -258,6 +267,8 @@ export class ShellService {
258
267
  * @returns Observable that emits true if the flavor was applied successfully
259
268
  */
260
269
  triggerApplyObjectFlavor(dmsObject, flavor, data, applyComponent) {
270
+ if (flavor.preventApply)
271
+ return of(false);
261
272
  if (dmsObject) {
262
273
  const ac = applyComponent || flavor.applyComponent;
263
274
  if (ac) {
@@ -284,6 +295,8 @@ export class ShellService {
284
295
  return of(false);
285
296
  }
286
297
  removeObjectFlavor(dmsObject, flavor) {
298
+ if (flavor.preventRemove)
299
+ return of(false);
287
300
  const data = {
288
301
  [BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS]: dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS].filter((sot) => sot !== flavor.sot)
289
302
  };
@@ -300,13 +313,15 @@ export class ShellService {
300
313
  * @returns Array of matching object flavors
301
314
  */
302
315
  getApplicableDocumentFlavors(mimeType, app, customFlavors) {
303
- return [...(customFlavors || []), ...this._objectFlavors].filter((of) => (!of.applicableTo?.folders || (of.applicableTo?.folders && of.applicableTo?.documents)) &&
316
+ return [...(customFlavors || []), ...this._objectFlavors].filter((of) =>
317
+ // !of.preventApply &&
318
+ (!of.applicableTo?.folders || (of.applicableTo?.folders && of.applicableTo?.documents)) &&
304
319
  (!of.applicableTo ||
305
320
  !of.applicableTo?.mimeTypes ||
306
321
  (of.applicableTo?.mimeTypes?.some((mtp) => Utils.patternToRegExp(mtp).test(mimeType)) && (!app || of.app === app))));
307
322
  }
308
323
  getApplicableFolderFlavors(app, customFlavors) {
309
- return [...(customFlavors || []), ...this._objectFlavors].filter((of) => of.applicableTo?.folders && (!app || of.app === app));
324
+ return [...(customFlavors || []), ...this._objectFlavors].filter((of) => !of.preventApply && of.applicableTo?.folders && (!app || of.app === app));
310
325
  }
311
326
  /**
312
327
  * Get applied and applicable object flavors for a certain object
@@ -328,7 +343,7 @@ export class ShellService {
328
343
  if (sots.includes(flavor.sot)) {
329
344
  applied.push(flavor);
330
345
  }
331
- else {
346
+ else if (!flavor.preventApply) {
332
347
  applicable.push(flavor);
333
348
  }
334
349
  });
@@ -417,4 +432,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
417
432
  providedIn: 'root'
418
433
  }]
419
434
  }], ctorParameters: () => [] });
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlL3NyYy9saWIvc2VydmljZXMvc2hlbGwvc2hlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixhQUFhLEVBRWIsVUFBVSxFQUVWLGFBQWEsRUFDYixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxLQUFLLEVBRU4sTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBK0IsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQW1CLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUt6RSxNQUFNLE9BQU8sWUFBWTtJQUN2QixXQUFXLENBQXNCO0lB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LEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzVHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDSCx3Q0FBd0M7SUFDMUMsQ0FBQzsrR0FyYlUsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIHNpZ25hbCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7XG4gIEFwaUJhc2UsXG4gIEJhc2VPYmplY3RUeXBlRmllbGQsXG4gIENvbmZpZ1NlcnZpY2UsXG4gIERtc09iamVjdCxcbiAgRG1zU2VydmljZSxcbiAgT2JqZWN0Q3JlYXRlRmxhdm9yLFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBTeXN0ZW1UeXBlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBVc2VyU2VydmljZSxcbiAgVXRpbHMsXG4gIFl1dlVzZXJcbn0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmaXJzdCwgZmlyc3RWYWx1ZUZyb20sIGZyb21FdmVudCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENMSUVOVF9TSEVMTF9BU1NFVFMgfSBmcm9tICcuLi8uLi9jbGllbnQtc2hlbGwuYXNzZXRzJztcbmltcG9ydCB7IEFwcCwgQXBwRmxhdm9yLCBDbGllbnRTaGVsbENvbmZpZywgR2xvYmFsU2hvcnRjdXQsIE9iamVjdEZsYXZvciwgU2hlbGxBcHBTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2NsaWVudC1zaGVsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGlsZUV4dGVuc2lvbiB9IGZyb20gJy4uLy4uL3RpbGUtZXh0ZW5zaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTSEVMTF9DT05GSUdfVFlQRVMgfSBmcm9tICcuLi9zaGVsbC1jb25maWcvc2hlbGwtY29uZmlnLmNvbnN0JztcbmltcG9ydCB7IENsaWVudFNoZWxsVHlwZSwgU2hlbGxDb25maWcgfSBmcm9tICcuLi9zaGVsbC1jb25maWcvc2hlbGwtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTaGVsbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zaGVsbC1jb25maWcvc2hlbGwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2Uge1xuICAjZG1zU2VydmljZSA9IGluamVjdChEbXNTZXJ2aWNlKTtcbiAgI2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICAjc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICAjdXNlclNlcnZpY2UgPSBpbmplY3QoVXNlclNlcnZpY2UpO1xuICAvLyBUT0RPOiBOZWVkIG9yaWduYWwgTWF0SWNvblJlZ2lzdHJ5IHRvICNyZWdpc3Rlck9iamVjdFR5cGVJY29ucywgb3RoZXJ3aXNlIGljb25zIGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkIGluIHRoZSBuYW1lc3BhY2VcbiAgLy8gI2ljb25SZWdpc3RyeSA9IGluamVjdChZdXZNYXRJY29uUmVnaXN0cnkpO1xuICAjaWNvblJlZ2lzdHJ5ID0gaW5qZWN0KE1hdEljb25SZWdpc3RyeSk7XG4gICNzaGVsbENvbmZpZyA9IGluamVjdChTaGVsbENvbmZpZ1NlcnZpY2UpO1xuICAjY29uZmlnU2VydmljZSA9IGluamVjdChDb25maWdTZXJ2aWNlKTtcbiAgI3Nhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICAjcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICNET0NVTUVOVCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgX2J1c3lDb3VudCA9IDA7XG4gIHByaXZhdGUgaXNCdXN5U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0J1c3kkID0gdGhpcy5pc0J1c3lTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpO1xuXG4gIC8vIEFwcHMgY2FuIHJlZ2lzdGVyIHRoZWlyIG93biBzZXR0aW5nIGNvbXBvbmVudHMgdG8gYmUgc2hvd24gaW4gc2hlbGwgc2V0dGluZ3NcbiAgI2FwcFNldHRpbmdzID0gc2lnbmFsPFNoZWxsQXBwU2V0dGluZ3NbXT4oW10pO1xuICBhcHBTZXR0aW5ncyA9IHRoaXMuI2FwcFNldHRpbmdzLmFzUmVhZG9ubHkoKTtcblxuICBhcHBCYXNlUm91dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgI2RlZmF1bHRTaGVsbENvbmZpZzogQ2xpZW50U2hlbGxDb25maWcgPSB7XG4gICAgYXBwSWNvbjogQ0xJRU5UX1NIRUxMX0FTU0VUUy5hcHBJY29uLFxuICAgIHNoZWxsSWNvbk5hbWVzcGFjZTogQ0xJRU5UX1NIRUxMX0FTU0VUUy5zaGVsbEljb25OYW1lc3BhY2VcbiAgfTtcbiAgc2hlbGxDb25maWcgPSBzaWduYWw8Q2xpZW50U2hlbGxDb25maWc+KHRoaXMuI2RlZmF1bHRTaGVsbENvbmZpZyk7XG4gIGFwcHMgPSBzaWduYWw8QXBwW10+KFtdKTtcblxuICAvKiogVE9ETzogaW1wbGVtZW50IHRoaXMgZmVhdHVyZSA/Pz8/XG4gICAqIEdsb2JhbCBzaG9ydGN1dHMgYXJlIGNhcHR1cmVkIGJ5IHRoZSBzaGVsbCB0byBwcm92aWRlIGEgY29uc2lzdGVudCBleHBlcmllbmNlXG4gICAqIGFjY3Jvc3MgYWxsIGFwcHMuIFNlYXJjaCBpcyBvbmUgZXhhbXBsZS4gQXBwcyBzaG91bGQgbm90IGRlZmluZSB0aGVpciBvd24gc2hvdXJ0Y3V0c1xuICAgKiBmb3Igc2VhcmNoLiBJbnN0ZWFkIHRoZXkgc2hvdWxkIHN1YnNjcmliZSB0byB0aGUgZ2xvYmFsIHNob3J0Y3V0cyBhbmQgaW5pdGlhbGl6ZSB0aGVpclxuICAgKiBzZWFyY2ggYmFzZWQgb24gdGhlIGdsb2JhbCBzZWFyY2ggc2hvcnRjdXQuXG4gICAqL1xuICBnbG9iYWxTaG9ydGN1dHMkOiBPYnNlcnZhYmxlPEdsb2JhbFNob3J0Y3V0PiA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKS5waXBlKFxuICAgIG1hcCgoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gZ2xvYmFsIHNob3J0Y3V0IGZvciBzZWFyY2hcbiAgICAgIC8vIGlmIChlLmN0cmxLZXkgJiYgZS5jb2RlID09PSAnS2V5RicpIHtcbiAgICAgIC8vICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgLy8gICByZXR1cm4gR2xvYmFsU2hvcnRjdXQuc2VhcmNoO1xuICAgICAgLy8gfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KSxcbiAgICBmaWx0ZXIoKHM6IEdsb2JhbFNob3J0Y3V0IHwgdW5kZWZpbmVkKSA9PiBzICE9PSB1bmRlZmluZWQpLFxuICAgIG1hcCgocykgPT4gcyBhcyBHbG9iYWxTaG9ydGN1dClcbiAgKTtcblxuICBwcml2YXRlIF9leHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBUaWxlRXh0ZW5zaW9uPiA9IHt9O1xuICBwcml2YXRlIF9vYmplY3RGbGF2b3JzOiBPYmplY3RGbGF2b3JbXSA9IFtdO1xuICBwcml2YXRlIF9vYmplY3RDcmVhdGVGbGF2b3JzOiBPYmplY3RDcmVhdGVGbGF2b3JbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5hcHBzLnNldCh0aGlzLiNnZXRNYXBwZWRBcHBzKHRoaXMuYXBwcygpKSk7XG4gICAgfSk7XG5cbiAgICAvLyB0cmFjayBvcGVuIGRpYWxvZ3MgaW4gYW4gYXV4aWxsYXJ5IHJvdXRlIHRvIHN1cHBvcnQgY2xvc2luZyB0aGVtIG9uIGJhY2sgbmF2aWdhdGlvblxuICAgIC8vIGFzIHRoaXMgaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW91ciBvbiBtb2JpbGUgZGV2aWNlc1xuICAgIHRoaXMuI2RpYWxvZy5hZnRlck9wZW5lZC5zdWJzY3JpYmUoKHJlZjogTWF0RGlhbG9nUmVmPGFueSwgYW55PikgPT4ge1xuICAgICAgKHRoaXMuI3JvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IGR0OiBbJ2RpYWxvZ3MnLCB0aGlzLiNkaWFsb2cub3BlbkRpYWxvZ3MubWFwKChkLCBpKSA9PiBpKS5qb2luKCctJyldIH0gfV0pLCBbeyByZXBsYWNlVXJsOiB0cnVlIH1dKTtcbiAgICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXM/LmNsb3NlZEJ5Um91dGUpIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3BlbkRpYWxvZ3MgPSB0aGlzLiNkaWFsb2cub3BlbkRpYWxvZ3MuZmlsdGVyKChkKSA9PiBkLmlkICE9PSByZWYuaWQpO1xuICAgICAgICAvLyBoYXZpbmcgbm8gb3BlbiBkaWFsb2dzLCBjbGVhciB0aGUgYXV4aWxsYXJ5IHJvdXRlXG4gICAgICAgIGNvbnN0IHBhcmFtID0gb3BlbkRpYWxvZ3MubGVuZ3RoID4gMCA/IFsnZGlhbG9ncycsIG9wZW5EaWFsb2dzLm1hcCgoZCwgaSkgPT4gaSkuam9pbignLScpXSA6IG51bGw7XG4gICAgICAgIHRoaXMuI3JvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IGR0OiBwYXJhbSB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiNyb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuI2RpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy4jcm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgZHQ6IG51bGwgfSB9XSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcGlja0ZpbGUoKTogT2JzZXJ2YWJsZTxGaWxlIHwgbnVsbD4ge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy4jRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBpbnB1dC50eXBlID0gJ2ZpbGUnO1xuICAgIGlucHV0LmNsaWNrKCk7XG4gICAgcmV0dXJuIGZyb21FdmVudChpbnB1dCwgJ2NoYW5nZScpLnBpcGUoXG4gICAgICBtYXAoKGU6IEV2ZW50KSA9PiAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM/LlswXSB8fCBudWxsKSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlucHV0LnJlbW92ZSgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2V0U2hlbGxDb25maWcoY3NjOiBDbGllbnRTaGVsbENvbmZpZykge1xuICAgIHRoaXMuc2hlbGxDb25maWcudXBkYXRlKChzYykgPT4gKHtcbiAgICAgIGFwcEljb246IGNzYy5hcHBJY29uID8/IHNjLmFwcEljb24sXG4gICAgICBzaGVsbEljb25OYW1lc3BhY2U6IGNzYy5zaGVsbEljb25OYW1lc3BhY2UgPz8gc2Muc2hlbGxJY29uTmFtZXNwYWNlXG4gICAgfSkpO1xuICB9XG5cbiAgc2V0QXBwcyhhcHBzOiBBcHBbXSkge1xuICAgIHRoaXMuYXBwcy5zZXQodGhpcy4jZ2V0TWFwcGVkQXBwcyhhcHBzKSk7XG4gICAgY29uc3QgYXBwQmFzZVJvdXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGFwcHMuZm9yRWFjaCgoYSkgPT4gKGFwcEJhc2VSb3V0ZXNbYS5pZF0gPSBhLnBhdGggfHwgJycpKTtcbiAgICB0aGlzLmFwcEJhc2VSb3V0ZXMgPSBhcHBCYXNlUm91dGVzO1xuICB9XG5cbiAgI2dldE1hcHBlZEFwcHMoYXBwczogQXBwW10pOiBBcHBbXSB7XG4gICAgcmV0dXJuIGFwcHMubWFwKChhKSA9PiB7XG4gICAgICBjb25zdCBtYSA9IHtcbiAgICAgICAgLi4uYSxcbiAgICAgICAgdGl0bGU6IHRoaXMuI2dldEFwcFRpdGxlKGEpXG4gICAgICB9O1xuICAgICAgaWYgKGEub3B0aW9ucz8uYXBwQ2xhaW1LZXkpIHtcbiAgICAgICAgbWEub3B0aW9ucyA9IHsgLi4ubWEub3B0aW9ucywgYXBwQ2xhaW06IHRoaXMuI2dldEFwcENsYWltKGEub3B0aW9ucy5hcHBDbGFpbUtleSkgfHwgYS5vcHRpb25zLmFwcENsYWltIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWE7XG4gICAgfSk7XG4gIH1cblxuICAjZ2V0QXBwVGl0bGUoYTogQXBwKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGEuaWQpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkVGl0bGUgJiYgIXRyYW5zbGF0ZWRUaXRsZS5zdGFydHNXaXRoKCchbWlzc2luZycpID8gdHJhbnNsYXRlZFRpdGxlIDogKGEudGl0bGUgYXMgc3RyaW5nKSB8fCAnJztcbiAgfVxuXG4gICNnZXRBcHBDbGFpbShjbGFpbUtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkQ2xhaW0gPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNsYWltS2V5KTtcbiAgICByZXR1cm4gdHJhbnNsYXRlZENsYWltICYmICF0cmFuc2xhdGVkQ2xhaW0uc3RhcnRzV2l0aCgnIW1pc3NpbmcnKSA/IHRyYW5zbGF0ZWRDbGFpbSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFwcChpZDogc3RyaW5nKTogQXBwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5hcHBzKCkuZmluZCgoYSkgPT4gaWQgPT09IGEuaWQpO1xuICB9XG5cbiAgZ2V0QXBwcyhpZHM6IHN0cmluZ1tdID0gW10pOiBBcHBbXSB7XG4gICAgcmV0dXJuIGlkcy5sZW5ndGggPyB0aGlzLmFwcHMoKS5maWx0ZXIoKGEpID0+IGlkcy5pbmNsdWRlcyhhLmlkKSkgOiB0aGlzLmFwcHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBzZXR0aW5ncyBmb3IgYXBwcyB0byBob29rIGludG8gc2hlbGwgc2V0dGluZ3MgcGFnZS5cbiAgICogQHBhcmFtIGFwcElEIElEIG9mIHRoZSBhcHAgdGhhdCBleHBvc2VzIHRoZSBzZXR0aW5nc1xuICAgKiBAcGFyYW0gY2ZnIFNoZWxsQXBwU2V0dGluZ3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNldHRpbmdzIGNvbXBvbmVudFxuICAgKi9cbiAgcmVnaXN0ZXJBcHBTZXR0aW5ncyhjZmc6IFNoZWxsQXBwU2V0dGluZ3MpIHtcbiAgICB0aGlzLiNhcHBTZXR0aW5ncy5zZXQoWy4uLnRoaXMuI2FwcFNldHRpbmdzKCksIGNmZ10pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgcGVyc2lzdGVkIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGFwcFxuICAgKiBAcGFyYW0gYXBwSUQgSUQgb2YgdGhlIGFwcCB0byBsb2FkIHRoZSBzZXR0aW5ncyBmb3JcbiAgICovXG4gIHVzZXJzQXBwU2V0dGluZ3MkKGFwcElEOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNoZWxsQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jdXNlclNlcnZpY2UudXNlciQucGlwZShcbiAgICAgIG1hcCgodTogWXV2VXNlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICByZXR1cm4gdSAmJiB1LnVzZXJTZXR0aW5ncy5jbGllbnRBcHBTZXR0aW5ncyA/IHUudXNlclNldHRpbmdzLmNsaWVudEFwcFNldHRpbmdzW2FwcElEXSA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVVc2Vyc0FwcFNldHRpbmdzKGFwcElEOiBzdHJpbmcsIHNldHRpbmdzOiBTaGVsbEFwcFNldHRpbmdzKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jdXNlclNlcnZpY2Uuc2F2ZVVzZXJTZXR0aW5ncyh7IGNsaWVudEFwcFNldHRpbmdzOiB7IFthcHBJRF06IHNldHRpbmdzIH0gfSk7XG4gIH1cblxuICBhZGRCdXN5KCkge1xuICAgIGlmICh0aGlzLl9idXN5Q291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuaXNCdXN5U3ViamVjdC5uZXh0KHRydWUpO1xuICAgIH1cbiAgICB0aGlzLl9idXN5Q291bnQrKztcbiAgfVxuICByZW1vdmVCdXN5KCkge1xuICAgIHRoaXMuX2J1c3lDb3VudC0tO1xuICAgIGlmICh0aGlzLl9idXN5Q291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuaXNCdXN5U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlcyBvYmplY3QgY3JlYXRlIGZsYXZvcnMgdG8gdGhlIHNoZWxsLlxuICAgKiBUaGVzIGZsYXZvcnMgZGVzY3JpYmUgZGlmZmVyZW50IHdheXMgb2YgaG93IG9iamVjdHMgY2FuIGJlIGNyZWF0ZWQuIFNvIGFwcHNcbiAgICogY2FuIHJlZ2lzdGVyIGN1c3RvbSB3YXlzIG9mIGNyZWF0aW5nIG9iamVjdHMgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIGJ5IG90aGVyIGFwcHMuXG4gICAqIEBwYXJhbSBmbGF2b3JzIENyZWF0ZSBmbGF2b3JzIHRvIGJlIGV4cG9zZWRcbiAgICovXG4gIGV4cG9zZU9iamVjdENyZWF0ZUZsYXZvcnMoZmxhdm9yczogT2JqZWN0Q3JlYXRlRmxhdm9yW10pIHtcbiAgICBmbGF2b3JzLmZvckVhY2goKGZsYXZvcjogT2JqZWN0Q3JlYXRlRmxhdm9yKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzLmZpbmRJbmRleCgoZikgPT4gZi5pZCA9PT0gZmxhdm9yLmlkKTtcbiAgICAgIGlmIChpZHggPT09IC0xKSB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzLnB1c2goZmxhdm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgb2JqZWN0IGNyZWF0ZSBmbGF2b3JzIGZyb20gdGhlIHNoZWxscyByZWdpc3RyeVxuICAgKiBAcGFyYW0gZmxhdm9ycyBDcmVhdGUgZmxhdm9ycyB0byBiZSByZW1vdmVkXG4gICAqL1xuICBjb25jZWFsT2JqZWN0Q3JlYXRlRmxhdm9ycyhmbGF2b3JzOiBPYmplY3RDcmVhdGVGbGF2b3JbXSkge1xuICAgIGNvbnN0IGZpZCA9IGZsYXZvcnMubWFwKChmKSA9PiBmLmlkKTtcbiAgICB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzID0gdGhpcy5fb2JqZWN0Q3JlYXRlRmxhdm9ycy5maWx0ZXIoKGYpID0+ICFmaWQuaW5jbHVkZXMoZi5pZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgcmVnaXN0ZXJkIG9iamVjdCBjcmVhdGUgZmxhdm9yc1xuICAgKi9cbiAgZ2V0T2JqZWN0Q3JlYXRlRmxhdm9ycygpOiBPYmplY3RDcmVhdGVGbGF2b3JbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnM7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlcyBhIGxpc3Qgb2Ygb2JqZWN0IGZsYXZvcnMgdG8gdGhlIHNoZWxsLlxuICAgKiBGbGF2b3JzIGFyZSBhYmxlIHRvIGJlIGFwcGxpZWQgdG8gb2JqZWN0cyBhbmQgYWRkIG5ldyBtZXRhZGF0YSBwcm9wZXJ0aWVzIHRvIHRoZW0uXG4gICAqIEBwYXJhbSBmbGF2b3JzIEFycmF5IG9mIGZsYXZvcnMgdG8gYmUgZXhwb3NlZFxuICAgKiBAcGFyYW0gYXBwIE9wdGlvbmFsIElEIG9mIHRoZSBhcHAgdGhhdCBleHBvc2VzIHRoZSBmbGF2b3JzIChkZWZhdWx0cyB0byAnZ2xvYmFsJyBpZiBub3QgcHJvdmlkZWQpXG4gICAqIEBwYXJhbSBvcmlnaW4gT3B0aW9uYWwgb3JpZ2luIG9mIHRoZSBmbGF2b3JzLiBGbGF2b3JzIGNvdWxkIGJlIGFkZGVkIGJ5IGFwcHMgb3IgZGVyaXZlZFxuICAgKiBmcm9tIGEgY29uZmlndXJhdGlvbiAoZGVmYXVsdHMgdG8gJ2FwcCcgaWYgbm90IHByb3ZpZGVkKVxuICAgKi9cbiAgZXhwb3NlT2JqZWN0Rmxhdm9ycyhmbGF2b3JzOiBBcHBGbGF2b3JbXSwgYXBwID0gJ2dsb2JhbCcsIG9yaWdpbjogJ2FwcCcgfCAnY29uZmlnJyA9ICdhcHAnKSB7XG4gICAgZmxhdm9ycy5mb3JFYWNoKChmKSA9PiB0aGlzLmV4cG9zZU9iamVjdEZsYXZvcihmLCBhcHAsIG9yaWdpbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZXhwb3NlZCBvYmplY3QgZmxhdm9ycyBmcm9tIHRoZSBzaGVsbC5cbiAgICogQHBhcmFtIGZsYXZvcnMgQXJyYXkgb2YgZmxhdm9ycyB0byBiZSBjb25jZWFsZWRcbiAgICovXG4gIGNvbmNlYWxPYmplY3RGbGF2b3JzKGZsYXZvcnM6IEFwcEZsYXZvcltdLCBhcHAgPSAnZ2xvYmFsJykge1xuICAgIGZsYXZvcnMuZm9yRWFjaCgoZikgPT4gdGhpcy5jb25jZWFsT2JqZWN0Rmxhdm9yKGYsIGFwcCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9zZXMgYW4gb2JqZWN0IGZsYXZvciB0byB0aGUgc2hlbGwuIEZsYXZvcnMgYXJlIGFibGUgdG8gYmUgYXBwbGllZCB0byBvYmplY3RzXG4gICAqIGluIG9yZGVyIHRvIGFkZCBhIG5ldyBhc3BlY3QgdG8gdGhlbS4gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYW4gaW1hZ2UgZm9yIGV4YW1wbGUgY291bGRcbiAgICogYmUgYWRkZWQgYSBmbGF2b3Igb2YgJ0VYSUYgRGF0YScgdGhhdCB3aWxsIGFkZCB0aGUgY29ycmVzcG9uZGluZyBTT1QgdG8gaXQuIFRoaXMgd2F5IHRoZVxuICAgKiBvYmplY3QgZ2V0cyBuZXcgbWV0YWRhdGEgcHJvcGVydGllcy4gSWYgc3VwcG9ydGVkLCB0aGVzZSBtZXRhZGF0YSBjb3VsZCBldmVuIGJlIGV4dHJhY3RlZFxuICAgKiBmcm9tIHRoZSBmaWxlIGFuZCBmaWxsZWQgb3V0IGF1dG9tYXRpY2FsbHkuXG4gICAqIEBwYXJhbSBmbGF2b3IgVGhlIGZsYXZvciBvYmplY3QgdG8gYmUgZXhwb3NlZFxuICAgKiBAcGFyYW0gYXBwIE9wdGlvbmFsIElEIG9mIHRoZSBhcHAgdGhhdCBleHBvc2VzIHRoZSBmbGF2b3IgKGRlZmF1bHRzIHRvICdnbG9iYWwnIGlmIG5vdCBwcm92aWRlZClcbiAgICogQHBhcmFtIG9yaWdpbiBPcHRpb25hbCBvcmlnaW4gb2YgdGhlIGZsYXZvcnMuIEZsYXZvcnMgY291bGQgYmUgYWRkZWQgYnkgYXBwcyBvciBkZXJpdmVkXG4gICAqIGZyb20gYSBjb25maWd1cmF0aW9uIChkZWZhdWx0cyB0byAnYXBwJyBpZiBub3QgcHJvdmlkZWQpXG4gICAqL1xuICBleHBvc2VPYmplY3RGbGF2b3IoZmxhdm9yOiBBcHBGbGF2b3IsIGFwcCA9ICdnbG9iYWwnLCBvcmlnaW46ICdhcHAnIHwgJ2NvbmZpZycgPSAnYXBwJykge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuX29iamVjdEZsYXZvcnMuZmluZEluZGV4KChmKSA9PiBmLmlkID09PSBmbGF2b3IuaWQgJiYgZi5hcHAgPT09IGFwcCk7XG4gICAgaWYgKGlkeCA9PT0gLTEpIHRoaXMuX29iamVjdEZsYXZvcnMucHVzaCh7IC4uLmZsYXZvciwgYXBwLCBvcmlnaW4gfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbiBleHBvc2VkIG9iamVjdCBmbGF2b3IgZnJvbSB0aGUgc2hlbGwuXG4gICAqIEBwYXJhbSBmbGF2b3IgRmxhdm9yIHRvIGJlIGNvbmNlYWxlZFxuICAgKiBAcGFyYW0gYXBwIE9wdGlvbmFsIElEIG9mIHRoZSBhcHAgdGhhdCBleHBvc2VzIHRoZSBmbGF2b3IgKGRlZmF1bHRzIHRvICdnbG9iYWwnIGlmIG5vdCBwcm92aWRlZClcbiAgICovXG4gIGNvbmNlYWxPYmplY3RGbGF2b3IoZmxhdm9yOiBBcHBGbGF2b3IsIGFwcCA9ICdnbG9iYWwnKSB7XG4gICAgdGhpcy5fb2JqZWN0Rmxhdm9ycyA9IHRoaXMuX29iamVjdEZsYXZvcnMuZmlsdGVyKChmKSA9PiBmLmlkICE9PSBmbGF2b3IuaWQgJiYgZi5hcHAgIT09IGFwcCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlZ2lzdGVyZWQgb2JqZWN0IGZsYXZvcnNcbiAgICogQHBhcmFtIGFwcCBPcHRpb25hbCBhcHAgSUQgdGhhdCByZXN0cmljdHMgdGhlIHJldHVybmVkIGZsYXZvcnMgdG8gdGhlIG9uZXNcbiAgICogcHJvdmlkZWQgYnkgYSBwYXJ0aWN1bGFyIGFwcC4gSWYgbm90IHByb3ZpZGVkIGFsbCBmbGF2b3JzIGFyZSByZXR1cm5lZFxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBtYXRjaGluZyBvYmplY3QgZmxhdm9yc1xuICAgKi9cbiAgZ2V0T2JqZWN0Rmxhdm9ycyhhcHA/OiBzdHJpbmcpOiBPYmplY3RGbGF2b3JbXSB7XG4gICAgcmV0dXJuIGFwcCA/IHRoaXMuX29iamVjdEZsYXZvcnMuZmlsdGVyKChvZikgPT4gb2YuYXBwID09PSBhcHApIDogdGhpcy5fb2JqZWN0Rmxhdm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyB0aGUgYXBwbGljYXRpb24gb2YgYW4gb2JqZWN0IGZsYXZvci4gSWYgdGhlIGZsYXZvciBoYXMgYW4gYXBwbHlDb21wb25lbnRcbiAgICogZGVmaW5lZCwgdGhlIG92ZXJsYXkgd2lsbCBiZSBvcGVuZWQgd2l0aCB0aGUgY29tcG9uZW50LiBPdGhlcndpc2UgdGhlIGZsYXZvciB3aWxsXG4gICAqIGJlIGFwcGxpZWQgZGlyZWN0bHkgdG8gdGhlIG9iamVjdC5cbiAgICogQHBhcmFtIGRtc09iamVjdCBUaGUgb2JqZWN0IHRvIGFwcGx5IHRoZSBmbGF2b3IgdG9cbiAgICogQHBhcmFtIGZsYXZvciBUaGUgZmxhdm9yIHRvIGFwcGx5XG4gICAqIEBwYXJhbSBkYXRhIE9wdGlvbmFsIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBmbGF2b3IgY29tcG9uZW50XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0cnVlIGlmIHRoZSBmbGF2b3Igd2FzIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5XG4gICAqL1xuICB0cmlnZ2VyQXBwbHlPYmplY3RGbGF2b3IoZG1zT2JqZWN0OiBEbXNPYmplY3QsIGZsYXZvcjogT2JqZWN0Rmxhdm9yLCBkYXRhPzogYW55LCBhcHBseUNvbXBvbmVudD86IFR5cGU8YW55Pik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmIChkbXNPYmplY3QpIHtcbiAgICAgIGNvbnN0IGFjID0gYXBwbHlDb21wb25lbnQgfHwgZmxhdm9yLmFwcGx5Q29tcG9uZW50O1xuICAgICAgaWYgKGFjKSB7XG4gICAgICAgIHRoaXMuI2RpYWxvZy5vcGVuKGFjLCB7XG4gICAgICAgICAgbWF4V2lkdGg6ICc5MHZ3JyxcbiAgICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgICAgICBtaW5XaWR0aDogJzUwdncnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGRtc09iamVjdCxcbiAgICAgICAgICAgIGZsYXZvcixcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzb3RzOiBzdHJpbmdbXSA9IChkbXNPYmplY3QuZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdIGFzIHN0cmluZ1tdKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge307XG4gICAgICAgIGRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSA9IFsuLi5zb3RzLCBmbGF2b3Iuc290XTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UudXBkYXRlRG1zT2JqZWN0KGRtc09iamVjdD8uaWQsIGRhdGEpLnBpcGUobWFwKCgpID0+IHRydWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuIG9mKGZhbHNlKTtcbiAgfVxuXG4gIHJlbW92ZU9iamVjdEZsYXZvcihkbXNPYmplY3Q6IERtc09iamVjdCwgZmxhdm9yOiBPYmplY3RGbGF2b3IpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU106IChkbXNPYmplY3QuZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdIGFzIHN0cmluZ1tdKS5maWx0ZXIoXG4gICAgICAgIChzb3Q6IHN0cmluZykgPT4gc290ICE9PSBmbGF2b3Iuc290XG4gICAgICApXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS51cGRhdGVEbXNPYmplY3QoZG1zT2JqZWN0LmlkLCBkYXRhKS5waXBlKG1hcCgoKSA9PiB0cnVlKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9iamVjdCBmbGF2b3JzIGFwcGxpY2FibGUgZm9yIGEgY2VydGFpbiBtaW1ldHlwZVxuICAgKiBAcGFyYW0gbWltZVR5cGUgTWltZSB0eXBlIG9yIG1pbWUgdHlwZSBwYXR0ZXJuIGxpa2UgJ2ltYWdlLyonXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgYXBwIElEIHRoYXQgcmVzdHJpY3RzIHRoZSByZXR1cm5lZCBmbGF2b3JzIHRvIHRoZSBvbmVzXG4gICAqIHByb3ZpZGVkIGJ5IGEgcGFydGljdWxhciBhcHBcbiAgICogQHBhcmFtIGN1c3RvbUZsYXZvcnMgT3B0aW9uYWwgYXJyYXkgb2YgY3VzdG9tIGZsYXZvcnMgdG8gYWxzbyB0YWtlIGludG8gYWNjb3VudC5cbiAgICogVGhpcyBjb3VsZCBiZSBmbGF2b3JzIG1hbmFnZWQgYnkgYW4gYXBwIGl0c2VsZiB0aGF0IGFyZSBub3Qgc3VwcG9zZWQgdG8gYmVcbiAgICogZXhwb3NlZCB0byBvdGhlciBhcHBzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIG1hdGNoaW5nIG9iamVjdCBmbGF2b3JzXG4gICAqL1xuICBnZXRBcHBsaWNhYmxlRG9jdW1lbnRGbGF2b3JzKG1pbWVUeXBlOiBzdHJpbmcsIGFwcD86IHN0cmluZywgY3VzdG9tRmxhdm9ycz86IE9iamVjdEZsYXZvcltdKTogT2JqZWN0Rmxhdm9yW10ge1xuICAgIHJldHVybiBbLi4uKGN1c3RvbUZsYXZvcnMgfHwgW10pLCAuLi50aGlzLl9vYmplY3RGbGF2b3JzXS5maWx0ZXIoXG4gICAgICAob2Y6IE9iamVjdEZsYXZvcikgPT5cbiAgICAgICAgKCFvZi5hcHBsaWNhYmxlVG8/LmZvbGRlcnMgfHwgKG9mLmFwcGxpY2FibGVUbz8uZm9sZGVycyAmJiBvZi5hcHBsaWNhYmxlVG8/LmRvY3VtZW50cykpICYmXG4gICAgICAgICghb2YuYXBwbGljYWJsZVRvIHx8XG4gICAgICAgICAgIW9mLmFwcGxpY2FibGVUbz8ubWltZVR5cGVzIHx8XG4gICAgICAgICAgKG9mLmFwcGxpY2FibGVUbz8ubWltZVR5cGVzPy5zb21lKChtdHApID0+IFV0aWxzLnBhdHRlcm5Ub1JlZ0V4cChtdHApLnRlc3QobWltZVR5cGUpKSAmJiAoIWFwcCB8fCBvZi5hcHAgPT09IGFwcCkpKVxuICAgICk7XG4gIH1cblxuICBnZXRBcHBsaWNhYmxlRm9sZGVyRmxhdm9ycyhhcHA/OiBzdHJpbmcsIGN1c3RvbUZsYXZvcnM/OiBPYmplY3RGbGF2b3JbXSk6IE9iamVjdEZsYXZvcltdIHtcbiAgICByZXR1cm4gWy4uLihjdXN0b21GbGF2b3JzIHx8IFtdKSwgLi4udGhpcy5fb2JqZWN0Rmxhdm9yc10uZmlsdGVyKChvZjogT2JqZWN0Rmxhdm9yKSA9PiBvZi5hcHBsaWNhYmxlVG8/LmZvbGRlcnMgJiYgKCFhcHAgfHwgb2YuYXBwID09PSBhcHApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYXBwbGllZCBhbmQgYXBwbGljYWJsZSBvYmplY3QgZmxhdm9ycyBmb3IgYSBjZXJ0YWluIG9iamVjdFxuICAgKiBAcGFyYW0gZG1zT2JqZWN0IERtc09iamVjdCB0byBnZXQgZmxhdm9ycyBmb3JcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdHdvIGFycmF5czogYXBwbGllZCBhbmQgYXBwbGljYWJsZSBmbGF2b3JzXG4gICAqL1xuICBnZXRBcHBsaWVkT2JqZWN0Rmxhdm9ycyhkbXNPYmplY3Q6IERtc09iamVjdCk6IHtcbiAgICBhcHBsaWVkOiBPYmplY3RGbGF2b3JbXTtcbiAgICBhcHBsaWNhYmxlOiBPYmplY3RGbGF2b3JbXTtcbiAgfSB7XG4gICAgY29uc3QgYXBwbGllZDogT2JqZWN0Rmxhdm9yW10gPSBbXTtcbiAgICBjb25zdCBhcHBsaWNhYmxlOiBPYmplY3RGbGF2b3JbXSA9IFtdO1xuICAgIGlmIChkbXNPYmplY3QpIHtcbiAgICAgIGNvbnN0IHNvdHM6IHN0cmluZ1tdID0gKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pIHx8IFtdO1xuICAgICAgaWYgKGRtc09iamVjdC5jb250ZW50KSB7XG4gICAgICAgIHRoaXMuZ2V0QXBwbGljYWJsZURvY3VtZW50Rmxhdm9ycyhkbXNPYmplY3QuY29udGVudC5taW1lVHlwZSkuZm9yRWFjaCgoZmxhdm9yOiBPYmplY3RGbGF2b3IpID0+IHtcbiAgICAgICAgICBmbGF2b3IgPSB7XG4gICAgICAgICAgICAuLi5mbGF2b3IsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLiNzeXN0ZW0uZ2V0TG9jYWxpemVkTGFiZWwoZmxhdm9yLmlkKSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGZsYXZvci5pZCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy4jc3lzdGVtLmdldExvY2FsaXplZERlc2NyaXB0aW9uKGZsYXZvci5pZCkgfHwgKGZsYXZvci5kZXNjcmlwdGlvbktleSA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmRlc2NyaXB0aW9uS2V5KSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChzb3RzLmluY2x1ZGVzKGZsYXZvci5zb3QpKSB7XG4gICAgICAgICAgICBhcHBsaWVkLnB1c2goZmxhdm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXBwbGljYWJsZS5wdXNoKGZsYXZvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRtc09iamVjdC5pc0ZvbGRlcikge1xuICAgICAgICB0aGlzLmdldEFwcGxpY2FibGVGb2xkZXJGbGF2b3JzKCkuZm9yRWFjaCgoZmxhdm9yOiBPYmplY3RGbGF2b3IpID0+IHtcbiAgICAgICAgICBmbGF2b3IgPSB7XG4gICAgICAgICAgICAuLi5mbGF2b3IsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLiNzeXN0ZW0uZ2V0TG9jYWxpemVkTGFiZWwoZmxhdm9yLmlkKSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGZsYXZvci5pZCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy4jc3lzdGVtLmdldExvY2FsaXplZERlc2NyaXB0aW9uKGZsYXZvci5pZCkgfHwgKGZsYXZvci5kZXNjcmlwdGlvbktleSA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmRlc2NyaXB0aW9uS2V5KSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChzb3RzLmluY2x1ZGVzKGZsYXZvci5zb3QpKSB7XG4gICAgICAgICAgICBhcHBsaWVkLnB1c2goZmxhdm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXBwbGljYWJsZS5wdXNoKGZsYXZvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYXBwbGllZCwgYXBwbGljYWJsZSB9O1xuICB9XG5cbiAgZ2V0Rmxhdm9yTGFiZWwoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLiNzeXN0ZW0uZ2V0TG9jYWxpemVkTGFiZWwoaWQpIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoaWQpO1xuICB9XG5cbiAgYXBwbHlPYmplY3RGbGF2b3IoZG1zT2JqZWN0OiBEbXNPYmplY3QsIGZsYXZvcjogT2JqZWN0Rmxhdm9yLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogT2JzZXJ2YWJsZTxEbXNPYmplY3Q+IHtcbiAgICBjb25zdCBzb3RzOiBzdHJpbmdbXSA9IChkbXNPYmplY3QuZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdIGFzIHN0cmluZ1tdKSB8fCBbXTtcbiAgICBkYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gPSBbLi4uc290cywgZmxhdm9yLnNvdF07XG4gICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UudXBkYXRlRG1zT2JqZWN0KGRtc09iamVjdC5pZCwgZGF0YSk7XG4gIH1cblxuICByZWdpc3RlclRpbGVFeHRlbnNpb24oZXh0OiBUaWxlRXh0ZW5zaW9uKSB7XG4gICAgdGhpcy5fZXh0ZW5zaW9uc1tleHQudHlwZUlkXSA9IGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGlsZSBleHRlbnNpb25zIGZvciBhIGNlcnRhaW4gdHlwZVxuICAgKiBAcGFyYW0gdHlwZUlkIElEIG9mIHRoZSB0eXBlIHRvIGZldGNoIGV4dGVzaW9uIGZvciAob2JqZWN0VHlwZUlEIG9yIHNlY29uZGFyeU9iamVjdFR5cGVJRClcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFJlZ2lzdGVyZWRUaWxlRXh0ZW5zaW9ucygpOiBSZWNvcmQ8c3RyaW5nLCBUaWxlRXh0ZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dGVuc2lvbnM7XG4gIH1cblxuICBfaW5pdE9iamVjdFR5cGVDb25maWcoKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLy8gbG9hZCBmbGF2b3JzIGZyb20gY29uZmlnXG4gICAgY29uc29sZS5kZWJ1ZygnTG9hZGluZyBvYmplY3QgdHlwZSBjb25maWcuLi4nKTtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLiNzaGVsbENvbmZpZy5nZXQoU0hFTExfQ09ORklHX1RZUEVTKS5waXBlKFxuICAgICAgICB0YXAoKHJlczogU2hlbGxDb25maWcgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWdpc3Rlck9iamVjdFR5cGVJY29ucygocmVzLmRhdGEgYXMgQ2xpZW50U2hlbGxUeXBlW10pLm1hcCgodCkgPT4gdC5pZCkpO1xuXG4gICAgICAgICAgICBjb25zdCBmbHY6IEFwcEZsYXZvcltdID0gKHJlcy5kYXRhIGFzIENsaWVudFNoZWxsVHlwZVtdKS5tYXAoKHQpID0+ICh7XG4gICAgICAgICAgICAgIGlkOiB0LmlkLFxuICAgICAgICAgICAgICBzb3Q6IHQuaWQsXG4gICAgICAgICAgICAgIGljb246IHQuaWQsXG4gICAgICAgICAgICAgIHN2Z0ljb246IHRydWUsXG4gICAgICAgICAgICAgIG9iamVjdFR5cGVJRDogdC5iYXNlVHlwZSxcbiAgICAgICAgICAgICAgYXBwbGljYWJsZVRvOiB7XG4gICAgICAgICAgICAgICAgZm9sZGVyczogdC5iYXNlVHlwZSA9PT0gU3lzdGVtVHlwZS5GT0xERVIgfHwgdC5iYXNlVHlwZSA9PT0gU3lzdGVtVHlwZS5PQkpFQ1QsXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRzOiB0LmJhc2VUeXBlID09PSBTeXN0ZW1UeXBlLkRPQ1VNRU5UIHx8IHQuYmFzZVR5cGUgPT09IFN5c3RlbVR5cGUuT0JKRUNULFxuICAgICAgICAgICAgICAgIG1pbWVUeXBlczogdC5hcHBsaWNhYmxlVG9NaW1lVHlwZXMgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVzZURlZmF1bHRBcHBseUNvbXBvbmVudDogIXQuaW5zdGFudEFwcGx5XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLmV4cG9zZU9iamVjdEZsYXZvcnMoZmx2LCAnZ2xvYmFsJywgJ2NvbmZpZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgI3JlZ2lzdGVyT2JqZWN0VHlwZUljb25zKGlkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLiNzeXN0ZW0uc3lzdGVtJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZHMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgLy8gc3BsaXQgdGVjaG5pY2FsIG5hbWUgZS5nLiAnc3lzdGVtOmRvY3VtZW50JyBhbmQgdXNlIHRoZSBmaXJzdCBwYXJ0IGFzIG5hbWVzcGFjZVxuICAgICAgICBjb25zdCBpZFRva2VucyA9IGlkLnNwbGl0KCc6Jyk7XG4gICAgICAgIGlmIChpZFRva2Vucy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCB1cmkgPSBgJHt0aGlzLiNjb25maWdTZXJ2aWNlLmdldEFwaUJhc2UoQXBpQmFzZS5ub25lLCB0cnVlKX0ke3RoaXMuI3N5c3RlbS5nZXRPYmplY3RUeXBlSWNvblVyaShpZCl9YDtcbiAgICAgICAgICB0aGlzLiNpY29uUmVnaXN0cnkuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKGlkVG9rZW5zWzBdLCBpZFRva2Vuc1sxXSwgdGhpcy4jc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfaW5pdCgpIHtcbiAgICAvLyB0aGUgcGxhY2UgZm9yIGluaXRpYWxpemF0aW9uIHRhc2tzIGlmXG4gIH1cbn1cbiJdfQ==
435
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlL3NyYy9saWIvc2VydmljZXMvc2hlbGwvc2hlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixhQUFhLEVBRWIsVUFBVSxFQUVWLGFBQWEsRUFDYixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxLQUFLLEVBRU4sTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBSzFFLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFdBQVcs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QVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBcGlCYXNlLFxuICBCYXNlT2JqZWN0VHlwZUZpZWxkLFxuICBDb25maWdTZXJ2aWNlLFxuICBEbXNPYmplY3QsXG4gIERtc1NlcnZpY2UsXG4gIE9iamVjdENyZWF0ZUZsYXZvcixcbiAgU3lzdGVtU2VydmljZSxcbiAgU3lzdGVtVHlwZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgVXNlclNlcnZpY2UsXG4gIFV0aWxzLFxuICBZdXZVc2VyXG59IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmlyc3QsIGZpcnN0VmFsdWVGcm9tLCBmcm9tRXZlbnQsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ0xJRU5UX1NIRUxMX0FTU0VUUyB9IGZyb20gJy4uLy4uL2NsaWVudC1zaGVsbC5hc3NldHMnO1xuaW1wb3J0IHsgQXBwLCBBcHBGbGF2b3IsIENsaWVudFNoZWxsQ29uZmlnLCBHbG9iYWxTaG9ydGN1dCwgT2JqZWN0Rmxhdm9yLCBTaGVsbEFwcFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vY2xpZW50LXNoZWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUaWxlRXh0ZW5zaW9uIH0gZnJvbSAnLi4vLi4vdGlsZS1leHRlbnNpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFNIRUxMX0NPTkZJR19UWVBFUyB9IGZyb20gJy4uL3NoZWxsLWNvbmZpZy9zaGVsbC1jb25maWcuY29uc3QnO1xuaW1wb3J0IHsgQ2xpZW50U2hlbGxUeXBlLCBTaGVsbENvbmZpZyB9IGZyb20gJy4uL3NoZWxsLWNvbmZpZy9zaGVsbC1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNoZWxsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NoZWxsLWNvbmZpZy9zaGVsbC1jb25maWcuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNoZWxsU2VydmljZSB7XG4gICNkbXNTZXJ2aWNlID0gaW5qZWN0KERtc1NlcnZpY2UpO1xuICAjZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gICNzeXN0ZW0gPSBpbmplY3QoU3lzdGVtU2VydmljZSk7XG4gICN1c2VyU2VydmljZSA9IGluamVjdChVc2VyU2VydmljZSk7XG4gIC8vIFRPRE86IE5lZWQgb3JpZ25hbCBNYXRJY29uUmVnaXN0cnkgdG8gI3JlZ2lzdGVyT2JqZWN0VHlwZUljb25zLCBvdGhlcndpc2UgaWNvbnMgY291bGQgbm90IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIG5hbWVzcGFjZVxuICAvLyAjaWNvblJlZ2lzdHJ5ID0gaW5qZWN0KFl1dk1hdEljb25SZWdpc3RyeSk7XG4gICNpY29uUmVnaXN0cnkgPSBpbmplY3QoTWF0SWNvblJlZ2lzdHJ5KTtcbiAgI3NoZWxsQ29uZmlnID0gaW5qZWN0KFNoZWxsQ29uZmlnU2VydmljZSk7XG4gICNjb25maWdTZXJ2aWNlID0gaW5qZWN0KENvbmZpZ1NlcnZpY2UpO1xuICAjc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gICNyb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgI3JvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgI0RPQ1VNRU5UID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBfYnVzeUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBpc0J1c3lTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzQnVzeSQgPSB0aGlzLmlzQnVzeVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoNTAwKSk7XG5cbiAgLy8gQXBwcyBjYW4gcmVnaXN0ZXIgdGhlaXIgb3duIHNldHRpbmcgY29tcG9uZW50cyB0byBiZSBzaG93biBpbiBzaGVsbCBzZXR0aW5nc1xuICAjYXBwU2V0dGluZ3MgPSBzaWduYWw8U2hlbGxBcHBTZXR0aW5nc1tdPihbXSk7XG4gIGFwcFNldHRpbmdzID0gdGhpcy4jYXBwU2V0dGluZ3MuYXNSZWFkb25seSgpO1xuXG4gIGFwcEJhc2VSb3V0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAjZGVmYXVsdFNoZWxsQ29uZmlnOiBDbGllbnRTaGVsbENvbmZpZyA9IHtcbiAgICBhcHBJY29uOiBDTElFTlRfU0hFTExfQVNTRVRTLmFwcEljb24sXG4gICAgc2hlbGxJY29uTmFtZXNwYWNlOiBDTElFTlRfU0hFTExfQVNTRVRTLnNoZWxsSWNvbk5hbWVzcGFjZVxuICB9O1xuICBzaGVsbENvbmZpZyA9IHNpZ25hbDxDbGllbnRTaGVsbENvbmZpZz4odGhpcy4jZGVmYXVsdFNoZWxsQ29uZmlnKTtcbiAgYXBwcyA9IHNpZ25hbDxBcHBbXT4oW10pO1xuXG4gIC8qKiBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlID8/Pz9cbiAgICogR2xvYmFsIHNob3J0Y3V0cyBhcmUgY2FwdHVyZWQgYnkgdGhlIHNoZWxsIHRvIHByb3ZpZGUgYSBjb25zaXN0ZW50IGV4cGVyaWVuY2VcbiAgICogYWNjcm9zcyBhbGwgYXBwcy4gU2VhcmNoIGlzIG9uZSBleGFtcGxlLiBBcHBzIHNob3VsZCBub3QgZGVmaW5lIHRoZWlyIG93biBzaG91cnRjdXRzXG4gICAqIGZvciBzZWFyY2guIEluc3RlYWQgdGhleSBzaG91bGQgc3Vic2NyaWJlIHRvIHRoZSBnbG9iYWwgc2hvcnRjdXRzIGFuZCBpbml0aWFsaXplIHRoZWlyXG4gICAqIHNlYXJjaCBiYXNlZCBvbiB0aGUgZ2xvYmFsIHNlYXJjaCBzaG9ydGN1dC5cbiAgICovXG4gIGdsb2JhbFNob3J0Y3V0cyQ6IE9ic2VydmFibGU8R2xvYmFsU2hvcnRjdXQ+ID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgbWFwKChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAvLyBnbG9iYWwgc2hvcnRjdXQgZm9yIHNlYXJjaFxuICAgICAgLy8gaWYgKGUuY3RybEtleSAmJiBlLmNvZGUgPT09ICdLZXlGJykge1xuICAgICAgLy8gICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyAgIHJldHVybiBHbG9iYWxTaG9ydGN1dC5zZWFyY2g7XG4gICAgICAvLyB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pLFxuICAgIGZpbHRlcigoczogR2xvYmFsU2hvcnRjdXQgfCB1bmRlZmluZWQpID0+IHMgIT09IHVuZGVmaW5lZCksXG4gICAgbWFwKChzKSA9PiBzIGFzIEdsb2JhbFNob3J0Y3V0KVxuICApO1xuXG4gIHByaXZhdGUgX2V4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIFRpbGVFeHRlbnNpb24+ID0ge307XG4gIHByaXZhdGUgX29iamVjdEZsYXZvcnM6IE9iamVjdEZsYXZvcltdID0gW107XG4gIHByaXZhdGUgX29iamVjdENyZWF0ZUZsYXZvcnM6IE9iamVjdENyZWF0ZUZsYXZvcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmFwcHMuc2V0KHRoaXMuI2dldE1hcHBlZEFwcHModGhpcy5hcHBzKCkpKTtcbiAgICB9KTtcblxuICAgIC8vIHRyYWNrIG9wZW4gZGlhbG9ncyBpbiBhbiBhdXhpbGxhcnkgcm91dGUgdG8gc3VwcG9ydCBjbG9zaW5nIHRoZW0gb24gYmFjayBuYXZpZ2F0aW9uXG4gICAgLy8gYXMgdGhpcyBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyIG9uIG1vYmlsZSBkZXZpY2VzXG4gICAgdGhpcy4jZGlhbG9nLmFmdGVyT3BlbmVkLnN1YnNjcmliZSgocmVmOiBNYXREaWFsb2dSZWY8YW55LCBhbnk+KSA9PiB7XG4gICAgICB0aGlzLiNyb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBkdDogWydkaWFsb2dzJywgdGhpcy4jZGlhbG9nLm9wZW5EaWFsb2dzLm1hcCgoZCwgaSkgPT4gaSkuam9pbignLScpXSB9IH1dLCB7XG4gICAgICAgIC8vIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZSdcbiAgICAgIH0pO1xuICAgICAgcmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcz8uY2xvc2VkQnlSb3V0ZSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcGVuRGlhbG9ncyA9IHRoaXMuI2RpYWxvZy5vcGVuRGlhbG9ncy5maWx0ZXIoKGQpID0+IGQuaWQgIT09IHJlZi5pZCk7XG4gICAgICAgIC8vIGhhdmluZyBubyBvcGVuIGRpYWxvZ3MsIGNsZWFyIHRoZSBhdXhpbGxhcnkgcm91dGVcbiAgICAgICAgY29uc3QgcGFyYW0gPSBvcGVuRGlhbG9ncy5sZW5ndGggPiAwID8gWydkaWFsb2dzJywgb3BlbkRpYWxvZ3MubWFwKChkLCBpKSA9PiBpKS5qb2luKCctJyldIDogbnVsbDtcbiAgICAgICAgdGhpcy4jcm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgZHQ6IHBhcmFtIH0gfV0sIHsgcmVwbGFjZVVybDogdHJ1ZSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ3ByZXNlcnZlJyB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuI3JvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICBpZiAodGhpcy4jZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCA9PT0gMCAmJiBlLnVybEFmdGVyUmVkaXJlY3RzLm1hdGNoKC8oZHQ6Wy5dKikvKSkge1xuICAgICAgICB0aGlzLiNyb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBkdDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZScgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwaWNrRmlsZSgpOiBPYnNlcnZhYmxlPEZpbGUgfCBudWxsPiB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLiNET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIGlucHV0LnR5cGUgPSAnZmlsZSc7XG4gICAgaW5wdXQuY2xpY2soKTtcbiAgICByZXR1cm4gZnJvbUV2ZW50KGlucHV0LCAnY2hhbmdlJykucGlwZShcbiAgICAgIG1hcCgoZTogRXZlbnQpID0+IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcz8uWzBdIHx8IG51bGwpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgaW5wdXQucmVtb3ZlKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZXRTaGVsbENvbmZpZyhjc2M6IENsaWVudFNoZWxsQ29uZmlnKSB7XG4gICAgdGhpcy5zaGVsbENvbmZpZy51cGRhdGUoKHNjKSA9PiAoe1xuICAgICAgYXBwSWNvbjogY3NjLmFwcEljb24gPz8gc2MuYXBwSWNvbixcbiAgICAgIHNoZWxsSWNvbk5hbWVzcGFjZTogY3NjLnNoZWxsSWNvbk5hbWVzcGFjZSA/PyBzYy5zaGVsbEljb25OYW1lc3BhY2VcbiAgICB9KSk7XG4gIH1cblxuICBzZXRBcHBzKGFwcHM6IEFwcFtdKSB7XG4gICAgdGhpcy5hcHBzLnNldCh0aGlzLiNnZXRNYXBwZWRBcHBzKGFwcHMpKTtcbiAgICBjb25zdCBhcHBCYXNlUm91dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgYXBwcy5mb3JFYWNoKChhKSA9PiAoYXBwQmFzZVJvdXRlc1thLmlkXSA9IGEucGF0aCB8fCAnJykpO1xuICAgIHRoaXMuYXBwQmFzZVJvdXRlcyA9IGFwcEJhc2VSb3V0ZXM7XG4gIH1cblxuICAjZ2V0TWFwcGVkQXBwcyhhcHBzOiBBcHBbXSk6IEFwcFtdIHtcbiAgICByZXR1cm4gYXBwcy5tYXAoKGEpID0+IHtcbiAgICAgIGNvbnN0IG1hID0ge1xuICAgICAgICAuLi5hLFxuICAgICAgICB0aXRsZTogdGhpcy4jZ2V0QXBwVGl0bGUoYSlcbiAgICAgIH07XG4gICAgICBpZiAoYS5vcHRpb25zPy5hcHBDbGFpbUtleSkge1xuICAgICAgICBtYS5vcHRpb25zID0geyAuLi5tYS5vcHRpb25zLCBhcHBDbGFpbTogdGhpcy4jZ2V0QXBwQ2xhaW0oYS5vcHRpb25zLmFwcENsYWltS2V5KSB8fCBhLm9wdGlvbnMuYXBwQ2xhaW0gfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYTtcbiAgICB9KTtcbiAgfVxuXG4gICNnZXRBcHBUaXRsZShhOiBBcHApOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zbGF0ZWRUaXRsZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYS5pZCk7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWRUaXRsZSAmJiAhdHJhbnNsYXRlZFRpdGxlLnN0YXJ0c1dpdGgoJyFtaXNzaW5nJykgPyB0cmFuc2xhdGVkVGl0bGUgOiAoYS50aXRsZSBhcyBzdHJpbmcpIHx8ICcnO1xuICB9XG5cbiAgI2dldEFwcENsYWltKGNsYWltS2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRyYW5zbGF0ZWRDbGFpbSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoY2xhaW1LZXkpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkQ2xhaW0gJiYgIXRyYW5zbGF0ZWRDbGFpbS5zdGFydHNXaXRoKCchbWlzc2luZycpID8gdHJhbnNsYXRlZENsYWltIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0QXBwKGlkOiBzdHJpbmcpOiBBcHAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFwcHMoKS5maW5kKChhKSA9PiBpZCA9PT0gYS5pZCk7XG4gIH1cblxuICBnZXRBcHBzKGlkczogc3RyaW5nW10gPSBbXSk6IEFwcFtdIHtcbiAgICByZXR1cm4gaWRzLmxlbmd0aCA/IHRoaXMuYXBwcygpLmZpbHRlcigoYSkgPT4gaWRzLmluY2x1ZGVzKGEuaWQpKSA6IHRoaXMuYXBwcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHNldHRpbmdzIGZvciBhcHBzIHRvIGhvb2sgaW50byBzaGVsbCBzZXR0aW5ncyBwYWdlLlxuICAgKiBAcGFyYW0gYXBwSUQgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIHNldHRpbmdzXG4gICAqIEBwYXJhbSBjZmcgU2hlbGxBcHBTZXR0aW5ncyBvYmplY3QgY29udGFpbmluZyB0aGUgc2V0dGluZ3MgY29tcG9uZW50XG4gICAqL1xuICByZWdpc3RlckFwcFNldHRpbmdzKGNmZzogU2hlbGxBcHBTZXR0aW5ncykge1xuICAgIHRoaXMuI2FwcFNldHRpbmdzLnNldChbLi4udGhpcy4jYXBwU2V0dGluZ3MoKSwgY2ZnXSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBwZXJzaXN0ZWQgc2V0dGluZ3MgZm9yIGEgc3BlY2lmaWMgYXBwXG4gICAqIEBwYXJhbSBhcHBJRCBJRCBvZiB0aGUgYXBwIHRvIGxvYWQgdGhlIHNldHRpbmdzIGZvclxuICAgKi9cbiAgdXNlcnNBcHBTZXR0aW5ncyQoYXBwSUQ6IHN0cmluZyk6IE9ic2VydmFibGU8U2hlbGxBcHBTZXR0aW5ncyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLiN1c2VyU2VydmljZS51c2VyJC5waXBlKFxuICAgICAgbWFwKCh1OiBZdXZVc2VyIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgIHJldHVybiB1ICYmIHUudXNlclNldHRpbmdzLmNsaWVudEFwcFNldHRpbmdzID8gdS51c2VyU2V0dGluZ3MuY2xpZW50QXBwU2V0dGluZ3NbYXBwSURdIDogdW5kZWZpbmVkO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2F2ZVVzZXJzQXBwU2V0dGluZ3MoYXBwSUQ6IHN0cmluZywgc2V0dGluZ3M6IFNoZWxsQXBwU2V0dGluZ3MpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLiN1c2VyU2VydmljZS5zYXZlVXNlclNldHRpbmdzKHsgY2xpZW50QXBwU2V0dGluZ3M6IHsgW2FwcElEXTogc2V0dGluZ3MgfSB9KTtcbiAgfVxuXG4gIGFkZEJ1c3koKSB7XG4gICAgaWYgKHRoaXMuX2J1c3lDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0J1c3lTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2J1c3lDb3VudCsrO1xuICB9XG4gIHJlbW92ZUJ1c3koKSB7XG4gICAgdGhpcy5fYnVzeUNvdW50LS07XG4gICAgaWYgKHRoaXMuX2J1c3lDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0J1c3lTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIG9iamVjdCBjcmVhdGUgZmxhdm9ycyB0byB0aGUgc2hlbGwuXG4gICAqIFRoZXMgZmxhdm9ycyBkZXNjcmliZSBkaWZmZXJlbnQgd2F5cyBvZiBob3cgb2JqZWN0cyBjYW4gYmUgY3JlYXRlZC4gU28gYXBwc1xuICAgKiBjYW4gcmVnaXN0ZXIgY3VzdG9tIHdheXMgb2YgY3JlYXRpbmcgb2JqZWN0cyB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgYnkgb3RoZXIgYXBwcy5cbiAgICogQHBhcmFtIGZsYXZvcnMgQ3JlYXRlIGZsYXZvcnMgdG8gYmUgZXhwb3NlZFxuICAgKi9cbiAgZXhwb3NlT2JqZWN0Q3JlYXRlRmxhdm9ycyhmbGF2b3JzOiBPYmplY3RDcmVhdGVGbGF2b3JbXSkge1xuICAgIGZsYXZvcnMuZm9yRWFjaCgoZmxhdm9yOiBPYmplY3RDcmVhdGVGbGF2b3IpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMuZmluZEluZGV4KChmKSA9PiBmLmlkID09PSBmbGF2b3IuaWQpO1xuICAgICAgaWYgKGlkeCA9PT0gLTEpIHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMucHVzaChmbGF2b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBvYmplY3QgY3JlYXRlIGZsYXZvcnMgZnJvbSB0aGUgc2hlbGxzIHJlZ2lzdHJ5XG4gICAqIEBwYXJhbSBmbGF2b3JzIENyZWF0ZSBmbGF2b3JzIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIGNvbmNlYWxPYmplY3RDcmVhdGVGbGF2b3JzKGZsYXZvcnM6IE9iamVjdENyZWF0ZUZsYXZvcltdKSB7XG4gICAgY29uc3QgZmlkID0gZmxhdm9ycy5tYXAoKGYpID0+IGYuaWQpO1xuICAgIHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMgPSB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzLmZpbHRlcigoZikgPT4gIWZpZC5pbmNsdWRlcyhmLmlkKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWdpc3RlcmQgb2JqZWN0IGNyZWF0ZSBmbGF2b3JzXG4gICAqL1xuICBnZXRPYmplY3RDcmVhdGVGbGF2b3JzKCk6IE9iamVjdENyZWF0ZUZsYXZvcltdIHtcbiAgICByZXR1cm4gdGhpcy5fb2JqZWN0Q3JlYXRlRmxhdm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIGEgbGlzdCBvZiBvYmplY3QgZmxhdm9ycyB0byB0aGUgc2hlbGwuXG4gICAqIEZsYXZvcnMgYXJlIGFibGUgdG8gYmUgYXBwbGllZCB0byBvYmplY3RzIGFuZCBhZGQgbmV3IG1ldGFkYXRhIHByb3BlcnRpZXMgdG8gdGhlbS5cbiAgICogQHBhcmFtIGZsYXZvcnMgQXJyYXkgb2YgZmxhdm9ycyB0byBiZSBleHBvc2VkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvcnMgKGRlZmF1bHRzIHRvICdnbG9iYWwnIGlmIG5vdCBwcm92aWRlZClcbiAgICogQHBhcmFtIG9yaWdpbiBPcHRpb25hbCBvcmlnaW4gb2YgdGhlIGZsYXZvcnMuIEZsYXZvcnMgY291bGQgYmUgYWRkZWQgYnkgYXBwcyBvciBkZXJpdmVkXG4gICAqIGZyb20gYSBjb25maWd1cmF0aW9uIChkZWZhdWx0cyB0byAnYXBwJyBpZiBub3QgcHJvdmlkZWQpXG4gICAqL1xuICBleHBvc2VPYmplY3RGbGF2b3JzKGZsYXZvcnM6IEFwcEZsYXZvcltdLCBhcHAgPSAnZ2xvYmFsJywgb3JpZ2luOiAnYXBwJyB8ICdjb25maWcnID0gJ2FwcCcpIHtcbiAgICBmbGF2b3JzLmZvckVhY2goKGYpID0+IHRoaXMuZXhwb3NlT2JqZWN0Rmxhdm9yKGYsIGFwcCwgb3JpZ2luKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBleHBvc2VkIG9iamVjdCBmbGF2b3JzIGZyb20gdGhlIHNoZWxsLlxuICAgKiBAcGFyYW0gZmxhdm9ycyBBcnJheSBvZiBmbGF2b3JzIHRvIGJlIGNvbmNlYWxlZFxuICAgKi9cbiAgY29uY2VhbE9iamVjdEZsYXZvcnMoZmxhdm9yczogQXBwRmxhdm9yW10sIGFwcCA9ICdnbG9iYWwnKSB7XG4gICAgZmxhdm9ycy5mb3JFYWNoKChmKSA9PiB0aGlzLmNvbmNlYWxPYmplY3RGbGF2b3IoZiwgYXBwKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlcyBhbiBvYmplY3QgZmxhdm9yIHRvIHRoZSBzaGVsbC4gRmxhdm9ycyBhcmUgYWJsZSB0byBiZSBhcHBsaWVkIHRvIG9iamVjdHNcbiAgICogaW4gb3JkZXIgdG8gYWRkIGEgbmV3IGFzcGVjdCB0byB0aGVtLiBBbiBvYmplY3QgY29udGFpbmluZyBhbiBpbWFnZSBmb3IgZXhhbXBsZSBjb3VsZFxuICAgKiBiZSBhZGRlZCBhIGZsYXZvciBvZiAnRVhJRiBEYXRhJyB0aGF0IHdpbGwgYWRkIHRoZSBjb3JyZXNwb25kaW5nIFNPVCB0byBpdC4gVGhpcyB3YXkgdGhlXG4gICAqIG9iamVjdCBnZXRzIG5ldyBtZXRhZGF0YSBwcm9wZXJ0aWVzLiBJZiBzdXBwb3J0ZWQsIHRoZXNlIG1ldGFkYXRhIGNvdWxkIGV2ZW4gYmUgZXh0cmFjdGVkXG4gICAqIGZyb20gdGhlIGZpbGUgYW5kIGZpbGxlZCBvdXQgYXV0b21hdGljYWxseS5cbiAgICogQHBhcmFtIGZsYXZvciBUaGUgZmxhdm9yIG9iamVjdCB0byBiZSBleHBvc2VkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvciAoZGVmYXVsdHMgdG8gJ2dsb2JhbCcgaWYgbm90IHByb3ZpZGVkKVxuICAgKiBAcGFyYW0gb3JpZ2luIE9wdGlvbmFsIG9yaWdpbiBvZiB0aGUgZmxhdm9ycy4gRmxhdm9ycyBjb3VsZCBiZSBhZGRlZCBieSBhcHBzIG9yIGRlcml2ZWRcbiAgICogZnJvbSBhIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHRzIHRvICdhcHAnIGlmIG5vdCBwcm92aWRlZClcbiAgICovXG4gIGV4cG9zZU9iamVjdEZsYXZvcihmbGF2b3I6IEFwcEZsYXZvciwgYXBwID0gJ2dsb2JhbCcsIG9yaWdpbjogJ2FwcCcgfCAnY29uZmlnJyA9ICdhcHAnKSB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maW5kSW5kZXgoKGYpID0+IGYuaWQgPT09IGZsYXZvci5pZCAmJiBmLmFwcCA9PT0gYXBwKTtcbiAgICBpZiAoaWR4ID09PSAtMSkgdGhpcy5fb2JqZWN0Rmxhdm9ycy5wdXNoKHsgLi4uZmxhdm9yLCBhcHAsIG9yaWdpbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGV4cG9zZWQgb2JqZWN0IGZsYXZvciBmcm9tIHRoZSBzaGVsbC5cbiAgICogQHBhcmFtIGZsYXZvciBGbGF2b3IgdG8gYmUgY29uY2VhbGVkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvciAoZGVmYXVsdHMgdG8gJ2dsb2JhbCcgaWYgbm90IHByb3ZpZGVkKVxuICAgKi9cbiAgY29uY2VhbE9iamVjdEZsYXZvcihmbGF2b3I6IEFwcEZsYXZvciwgYXBwID0gJ2dsb2JhbCcpIHtcbiAgICB0aGlzLl9vYmplY3RGbGF2b3JzID0gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maWx0ZXIoKGYpID0+IHtcbiAgICAgIGNvbnN0IGhhc1NhbWVJZCA9IGYuaWQgPT09IGZsYXZvci5pZDtcbiAgICAgIGNvbnN0IGlzRnJvbVNhbWVBcHAgPSBmLmFwcCA9PT0gYXBwO1xuICAgICAgcmV0dXJuIGhhc1NhbWVJZCAmJiBpc0Zyb21TYW1lQXBwID8gZmFsc2UgOiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWdpc3RlcmVkIG9iamVjdCBmbGF2b3JzXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgYXBwIElEIHRoYXQgcmVzdHJpY3RzIHRoZSByZXR1cm5lZCBmbGF2b3JzIHRvIHRoZSBvbmVzXG4gICAqIHByb3ZpZGVkIGJ5IGEgcGFydGljdWxhciBhcHAuIElmIG5vdCBwcm92aWRlZCBhbGwgZmxhdm9ycyBhcmUgcmV0dXJuZWRcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWF0Y2hpbmcgb2JqZWN0IGZsYXZvcnNcbiAgICovXG4gIGdldE9iamVjdEZsYXZvcnMoYXBwPzogc3RyaW5nKTogT2JqZWN0Rmxhdm9yW10ge1xuICAgIHJldHVybiBhcHAgPyB0aGlzLl9vYmplY3RGbGF2b3JzLmZpbHRlcigob2YpID0+IG9mLmFwcCA9PT0gYXBwKSA6IHRoaXMuX29iamVjdEZsYXZvcnM7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgdGhlIGFwcGxpY2F0aW9uIG9mIGFuIG9iamVjdCBmbGF2b3IuIElmIHRoZSBmbGF2b3IgaGFzIGFuIGFwcGx5Q29tcG9uZW50XG4gICAqIGRlZmluZWQsIHRoZSBvdmVybGF5IHdpbGwgYmUgb3BlbmVkIHdpdGggdGhlIGNvbXBvbmVudC4gT3RoZXJ3aXNlIHRoZSBmbGF2b3Igd2lsbFxuICAgKiBiZSBhcHBsaWVkIGRpcmVjdGx5IHRvIHRoZSBvYmplY3QuXG4gICAqIEBwYXJhbSBkbXNPYmplY3QgVGhlIG9iamVjdCB0byBhcHBseSB0aGUgZmxhdm9yIHRvXG4gICAqIEBwYXJhbSBmbGF2b3IgVGhlIGZsYXZvciB0byBhcHBseVxuICAgKiBAcGFyYW0gZGF0YSBPcHRpb25hbCBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgZmxhdm9yIGNvbXBvbmVudFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdHJ1ZSBpZiB0aGUgZmxhdm9yIHdhcyBhcHBsaWVkIHN1Y2Nlc3NmdWxseVxuICAgKi9cbiAgdHJpZ2dlckFwcGx5T2JqZWN0Rmxhdm9yKGRtc09iamVjdDogRG1zT2JqZWN0LCBmbGF2b3I6IE9iamVjdEZsYXZvciwgZGF0YT86IGFueSwgYXBwbHlDb21wb25lbnQ/OiBUeXBlPGFueT4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZiAoZmxhdm9yLnByZXZlbnRBcHBseSkgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICBpZiAoZG1zT2JqZWN0KSB7XG4gICAgICBjb25zdCBhYyA9IGFwcGx5Q29tcG9uZW50IHx8IGZsYXZvci5hcHBseUNvbXBvbmVudDtcbiAgICAgIGlmIChhYykge1xuICAgICAgICB0aGlzLiNkaWFsb2cub3BlbihhYywge1xuICAgICAgICAgIG1heFdpZHRoOiAnOTB2dycsXG4gICAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICAgICAgbWluV2lkdGg6ICc1MHZ3JyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBkbXNPYmplY3QsXG4gICAgICAgICAgICBmbGF2b3IsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc290czogc3RyaW5nW10gPSAoZG1zT2JqZWN0LmRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSBhcyBzdHJpbmdbXSkgfHwgW107XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHt9O1xuICAgICAgICBkYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gPSBbLi4uc290cywgZmxhdm9yLnNvdF07XG4gICAgICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLnVwZGF0ZURtc09iamVjdChkbXNPYmplY3Q/LmlkLCBkYXRhKS5waXBlKG1hcCgoKSA9PiB0cnVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHJldHVybiBvZihmYWxzZSk7XG4gIH1cblxuICByZW1vdmVPYmplY3RGbGF2b3IoZG1zT2JqZWN0OiBEbXNPYmplY3QsIGZsYXZvcjogT2JqZWN0Rmxhdm9yKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoZmxhdm9yLnByZXZlbnRSZW1vdmUpIHJldHVybiBvZihmYWxzZSk7XG4gICAgY29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXTogKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pLmZpbHRlcihcbiAgICAgICAgKHNvdDogc3RyaW5nKSA9PiBzb3QgIT09IGZsYXZvci5zb3RcbiAgICAgIClcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLnVwZGF0ZURtc09iamVjdChkbXNPYmplY3QuaWQsIGRhdGEpLnBpcGUobWFwKCgpID0+IHRydWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb2JqZWN0IGZsYXZvcnMgYXBwbGljYWJsZSBmb3IgYSBjZXJ0YWluIG1pbWV0eXBlXG4gICAqIEBwYXJhbSBtaW1lVHlwZSBNaW1lIHR5cGUgb3IgbWltZSB0eXBlIHBhdHRlcm4gbGlrZSAnaW1hZ2UvKidcbiAgICogQHBhcmFtIGFwcCBPcHRpb25hbCBhcHAgSUQgdGhhdCByZXN0cmljdHMgdGhlIHJldHVybmVkIGZsYXZvcnMgdG8gdGhlIG9uZXNcbiAgICogcHJvdmlkZWQgYnkgYSBwYXJ0aWN1bGFyIGFwcFxuICAgKiBAcGFyYW0gY3VzdG9tRmxhdm9ycyBPcHRpb25hbCBhcnJheSBvZiBjdXN0b20gZmxhdm9ycyB0byBhbHNvIHRha2UgaW50byBhY2NvdW50LlxuICAgKiBUaGlzIGNvdWxkIGJlIGZsYXZvcnMgbWFuYWdlZCBieSBhbiBhcHAgaXRzZWxmIHRoYXQgYXJlIG5vdCBzdXBwb3NlZCB0byBiZVxuICAgKiBleHBvc2VkIHRvIG90aGVyIGFwcHNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWF0Y2hpbmcgb2JqZWN0IGZsYXZvcnNcbiAgICovXG4gIGdldEFwcGxpY2FibGVEb2N1bWVudEZsYXZvcnMobWltZVR5cGU6IHN0cmluZywgYXBwPzogc3RyaW5nLCBjdXN0b21GbGF2b3JzPzogT2JqZWN0Rmxhdm9yW10pOiBPYmplY3RGbGF2b3JbXSB7XG4gICAgcmV0dXJuIFsuLi4oY3VzdG9tRmxhdm9ycyB8fCBbXSksIC4uLnRoaXMuX29iamVjdEZsYXZvcnNdLmZpbHRlcihcbiAgICAgIChvZjogT2JqZWN0Rmxhdm9yKSA9PlxuICAgICAgICAvLyAhb2YucHJldmVudEFwcGx5ICYmXG4gICAgICAgICghb2YuYXBwbGljYWJsZVRvPy5mb2xkZXJzIHx8IChvZi5hcHBsaWNhYmxlVG8/LmZvbGRlcnMgJiYgb2YuYXBwbGljYWJsZVRvPy5kb2N1bWVudHMpKSAmJlxuICAgICAgICAoIW9mLmFwcGxpY2FibGVUbyB8fFxuICAgICAgICAgICFvZi5hcHBsaWNhYmxlVG8/Lm1pbWVUeXBlcyB8fFxuICAgICAgICAgIChvZi5hcHBsaWNhYmxlVG8/Lm1pbWVUeXBlcz8uc29tZSgobXRwKSA9PiBVdGlscy5wYXR0ZXJuVG9SZWdFeHAobXRwKS50ZXN0KG1pbWVUeXBlKSkgJiYgKCFhcHAgfHwgb2YuYXBwID09PSBhcHApKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QXBwbGljYWJsZUZvbGRlckZsYXZvcnMoYXBwPzogc3RyaW5nLCBjdXN0b21GbGF2b3JzPzogT2JqZWN0Rmxhdm9yW10pOiBPYmplY3RGbGF2b3JbXSB7XG4gICAgcmV0dXJuIFsuLi4oY3VzdG9tRmxhdm9ycyB8fCBbXSksIC4uLnRoaXMuX29iamVjdEZsYXZvcnNdLmZpbHRlcihcbiAgICAgIChvZjogT2JqZWN0Rmxhdm9yKSA9PiAhb2YucHJldmVudEFwcGx5ICYmIG9mLmFwcGxpY2FibGVUbz8uZm9sZGVycyAmJiAoIWFwcCB8fCBvZi5hcHAgPT09IGFwcClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcHBsaWVkIGFuZCBhcHBsaWNhYmxlIG9iamVjdCBmbGF2b3JzIGZvciBhIGNlcnRhaW4gb2JqZWN0XG4gICAqIEBwYXJhbSBkbXNPYmplY3QgRG1zT2JqZWN0IHRvIGdldCBmbGF2b3JzIGZvclxuICAgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0d28gYXJyYXlzOiBhcHBsaWVkIGFuZCBhcHBsaWNhYmxlIGZsYXZvcnNcbiAgICovXG4gIGdldEFwcGxpZWRPYmplY3RGbGF2b3JzKGRtc09iamVjdDogRG1zT2JqZWN0KToge1xuICAgIGFwcGxpZWQ6IE9iamVjdEZsYXZvcltdO1xuICAgIGFwcGxpY2FibGU6IE9iamVjdEZsYXZvcltdO1xuICB9IHtcbiAgICBjb25zdCBhcHBsaWVkOiBPYmplY3RGbGF2b3JbXSA9IFtdO1xuICAgIGNvbnN0IGFwcGxpY2FibGU6IE9iamVjdEZsYXZvcltdID0gW107XG4gICAgaWYgKGRtc09iamVjdCkge1xuICAgICAgY29uc3Qgc290czogc3RyaW5nW10gPSAoZG1zT2JqZWN0LmRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSBhcyBzdHJpbmdbXSkgfHwgW107XG4gICAgICBpZiAoZG1zT2JqZWN0LmNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5nZXRBcHBsaWNhYmxlRG9jdW1lbnRGbGF2b3JzKGRtc09iamVjdC5jb250ZW50Lm1pbWVUeXBlKS5mb3JFYWNoKChmbGF2b3I6IE9iamVjdEZsYXZvcikgPT4ge1xuICAgICAgICAgIGZsYXZvciA9IHtcbiAgICAgICAgICAgIC4uLmZsYXZvcixcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuI3N5c3RlbS5nZXRMb2NhbGl6ZWRMYWJlbChmbGF2b3IuaWQpIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmlkKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLiNzeXN0ZW0uZ2V0TG9jYWxpemVkRGVzY3JpcHRpb24oZmxhdm9yLmlkKSB8fCAoZmxhdm9yLmRlc2NyaXB0aW9uS2V5ID8gdGhpcy50cmFuc2xhdGUuaW5zdGFudChmbGF2b3IuZGVzY3JpcHRpb25LZXkpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHNvdHMuaW5jbHVkZXMoZmxhdm9yLnNvdCkpIHtcbiAgICAgICAgICAgIGFwcGxpZWQucHVzaChmbGF2b3IpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWZsYXZvci5wcmV2ZW50QXBwbHkpIHtcbiAgICAgICAgICAgIGFwcGxpY2FibGUucHVzaChmbGF2b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkbXNPYmplY3QuaXNGb2xkZXIpIHtcbiAgICAgICAgdGhpcy5nZXRBcHBsaWNhYmxlRm9sZGVyRmxhdm9ycygpLmZvckVhY2goKGZsYXZvcjogT2JqZWN0Rmxhdm9yKSA9PiB7XG4gICAgICAgICAgZmxhdm9yID0ge1xuICAgICAgICAgICAgLi4uZmxhdm9yLFxuICAgICAgICAgICAgbmFtZTogdGhpcy4jc3lzdGVtLmdldExvY2FsaXplZExhYmVsKGZsYXZvci5pZCkgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudChmbGF2b3IuaWQpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuI3N5c3RlbS5nZXRMb2NhbGl6ZWREZXNjcmlwdGlvbihmbGF2b3IuaWQpIHx8IChmbGF2b3IuZGVzY3JpcHRpb25LZXkgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGZsYXZvci5kZXNjcmlwdGlvbktleSkgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoc290cy5pbmNsdWRlcyhmbGF2b3Iuc290KSkge1xuICAgICAgICAgICAgYXBwbGllZC5wdXNoKGZsYXZvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGxpY2FibGUucHVzaChmbGF2b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGFwcGxpZWQsIGFwcGxpY2FibGUgfTtcbiAgfVxuXG4gIGdldEZsYXZvckxhYmVsKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy4jc3lzdGVtLmdldExvY2FsaXplZExhYmVsKGlkKSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGlkKTtcbiAgfVxuXG4gIGFwcGx5T2JqZWN0Rmxhdm9yKGRtc09iamVjdDogRG1zT2JqZWN0LCBmbGF2b3I6IE9iamVjdEZsYXZvciwgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IE9ic2VydmFibGU8RG1zT2JqZWN0PiB7XG4gICAgY29uc3Qgc290czogc3RyaW5nW10gPSAoZG1zT2JqZWN0LmRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSBhcyBzdHJpbmdbXSkgfHwgW107XG4gICAgZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdID0gWy4uLnNvdHMsIGZsYXZvci5zb3RdO1xuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLnVwZGF0ZURtc09iamVjdChkbXNPYmplY3QuaWQsIGRhdGEpO1xuICB9XG5cbiAgcmVnaXN0ZXJUaWxlRXh0ZW5zaW9uKGV4dDogVGlsZUV4dGVuc2lvbikge1xuICAgIHRoaXMuX2V4dGVuc2lvbnNbZXh0LnR5cGVJZF0gPSBleHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRpbGUgZXh0ZW5zaW9ucyBmb3IgYSBjZXJ0YWluIHR5cGVcbiAgICogQHBhcmFtIHR5cGVJZCBJRCBvZiB0aGUgdHlwZSB0byBmZXRjaCBleHRlc2lvbiBmb3IgKG9iamVjdFR5cGVJRCBvciBzZWNvbmRhcnlPYmplY3RUeXBlSUQpXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRSZWdpc3RlcmVkVGlsZUV4dGVuc2lvbnMoKTogUmVjb3JkPHN0cmluZywgVGlsZUV4dGVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9leHRlbnNpb25zO1xuICB9XG5cbiAgX2luaXRPYmplY3RUeXBlQ29uZmlnKCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIC8vIGxvYWQgZmxhdm9ycyBmcm9tIGNvbmZpZ1xuICAgIGNvbnNvbGUuZGVidWcoJ0xvYWRpbmcgb2JqZWN0IHR5cGUgY29uZmlnLi4uJyk7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy4jc2hlbGxDb25maWcuZ2V0KFNIRUxMX0NPTkZJR19UWVBFUykucGlwZShcbiAgICAgICAgdGFwKChyZXM6IFNoZWxsQ29uZmlnIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgdGhpcy4jcmVnaXN0ZXJPYmplY3RUeXBlSWNvbnMoKHJlcy5kYXRhIGFzIENsaWVudFNoZWxsVHlwZVtdKS5tYXAoKHQpID0+IHQuaWQpKTtcblxuICAgICAgICAgICAgY29uc3QgZmx2OiBBcHBGbGF2b3JbXSA9IChyZXMuZGF0YSBhcyBDbGllbnRTaGVsbFR5cGVbXSkubWFwKCh0KSA9PiAoe1xuICAgICAgICAgICAgICBpZDogdC5pZCxcbiAgICAgICAgICAgICAgc290OiB0LmlkLFxuICAgICAgICAgICAgICBpY29uOiB0LmlkLFxuICAgICAgICAgICAgICBzdmdJY29uOiB0cnVlLFxuICAgICAgICAgICAgICBvYmplY3RUeXBlSUQ6IHQuYmFzZVR5cGUsXG4gICAgICAgICAgICAgIGFwcGxpY2FibGVUbzoge1xuICAgICAgICAgICAgICAgIGZvbGRlcnM6IHQuYmFzZVR5cGUgPT09IFN5c3RlbVR5cGUuRk9MREVSIHx8IHQuYmFzZVR5cGUgPT09IFN5c3RlbVR5cGUuT0JKRUNULFxuICAgICAgICAgICAgICAgIGRvY3VtZW50czogdC5iYXNlVHlwZSA9PT0gU3lzdGVtVHlwZS5ET0NVTUVOVCB8fCB0LmJhc2VUeXBlID09PSBTeXN0ZW1UeXBlLk9CSkVDVCxcbiAgICAgICAgICAgICAgICBtaW1lVHlwZXM6IHQuYXBwbGljYWJsZVRvTWltZVR5cGVzIHx8IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB1c2VEZWZhdWx0QXBwbHlDb21wb25lbnQ6ICF0Lmluc3RhbnRBcHBseVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5leHBvc2VPYmplY3RGbGF2b3JzKGZsdiwgJ2dsb2JhbCcsICdjb25maWcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gICNyZWdpc3Rlck9iamVjdFR5cGVJY29ucyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy4jc3lzdGVtLnN5c3RlbSQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIC8vIHNwbGl0IHRlY2huaWNhbCBuYW1lIGUuZy4gJ3N5c3RlbTpkb2N1bWVudCcgYW5kIHVzZSB0aGUgZmlyc3QgcGFydCBhcyBuYW1lc3BhY2VcbiAgICAgICAgY29uc3QgaWRUb2tlbnMgPSBpZC5zcGxpdCgnOicpO1xuICAgICAgICBpZiAoaWRUb2tlbnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3QgdXJpID0gYCR7dGhpcy4jY29uZmlnU2VydmljZS5nZXRBcGlCYXNlKEFwaUJhc2Uubm9uZSwgdHJ1ZSl9JHt0aGlzLiNzeXN0ZW0uZ2V0T2JqZWN0VHlwZUljb25VcmkoaWQpfWA7XG4gICAgICAgICAgdGhpcy4jaWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZShpZFRva2Vuc1swXSwgaWRUb2tlbnNbMV0sIHRoaXMuI3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJpKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX2luaXQoKSB7XG4gICAgLy8gdGhlIHBsYWNlIGZvciBpbml0aWFsaXphdGlvbiB0YXNrcyBpZlxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-shell-core",
3
- "version": "2.3.11",
3
+ "version": "2.3.13",
4
4
  "author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -9,7 +9,7 @@
9
9
  "@angular/material": "^19.2.15",
10
10
  "rxjs": "^7.8.2",
11
11
  "@angular/platform-browser": "^19.2.1",
12
- "@yuuvis/client-core": "^2.3.11"
12
+ "@yuuvis/client-core": "^2.3.13"
13
13
  },
14
14
  "dependencies": {
15
15
  "tslib": "^2.3.0"