@arsedizioni/ars-utils 18.2.118 → 18.2.119

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -78,7 +78,7 @@ export declare class ClipperDocumentManager {
78
78
  * @param documentId : the document id
79
79
  * @param query: the query string
80
80
  */
81
- openDocument(documentId: string | null | undefined, query?: string | null | undefined): void;
81
+ openDocument(_documentId: string | null | undefined, _query?: string | null | undefined): void;
82
82
  /**
83
83
  * Open a references dialog
84
84
  * @param documentId : the document id
@@ -88,7 +88,7 @@ export declare class ClipperDocumentManager {
88
88
  * @param anchorTitle: : the optional anchor title
89
89
  * @param update: true if is an update
90
90
  */
91
- openReferences(documentId: string | null, mode?: ClipperQueryReferencesMode | null, model?: number | null | undefined, anchor?: string | null | undefined, anchorTitle?: string | null | undefined, update?: boolean | null | undefined): void;
91
+ openReferences(_documentId: string | null, _mode?: ClipperQueryReferencesMode | null, _model?: number | null | undefined, _anchor?: string | null | undefined, _anchorTitle?: string | null | undefined, _update?: boolean | null | undefined): void;
92
92
  /**
93
93
  * Manage clipper bag
94
94
  */
@@ -4,7 +4,7 @@ import { ClipperSearchResultManager } from '../search-result-manager/search-resu
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class ClipperDocumentMenuComponent {
6
6
  private clipperService;
7
- selectionSource: import("@angular/core").InputSignal<"bag" | "selection" | "none">;
7
+ selectionSource: import("@angular/core").InputSignal<"selection" | "none" | "bag">;
8
8
  protected selection: Signal<ClipperDocumentInfo[]>;
9
9
  useSelections: import("@angular/core").InputSignal<boolean>;
10
10
  parent: import("@angular/core").InputSignal<ClipperSearchResultManager>;
@@ -1,7 +1,7 @@
1
1
  import { BreakpointObserver } from '@angular/cdk/layout';
2
2
  import { ChangeDetectorRef, OnDestroy } from '@angular/core';
3
3
  import { MatPaginator } from '@angular/material/paginator';
4
- import { ClipperDocumentInfo, ClipperQueryReferencesMode, ClipperSearchCalendarSnapshotResult, ClipperSearchFacetsResult, ClipperSearchParams, ClipperSearchResult, ClipperService } from '@arsedizioni/ars-utils/clipper.common';
4
+ import { ClipperDocumentInfo, ClipperSearchCalendarSnapshotResult, ClipperSearchFacetsResult, ClipperSearchParams, ClipperSearchResult, ClipperService } from '@arsedizioni/ars-utils/clipper.common';
5
5
  import { BroadcastService, NameValueItem, ScreenService, SelectableModel } from '@arsedizioni/ars-utils/core';
6
6
  import { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';
7
7
  import { Subject } from 'rxjs';
@@ -136,30 +136,6 @@ export declare class ClipperSearchResultManager extends ClipperDocumentManager i
136
136
  * Get the selected id
137
137
  */
138
138
  setRead(value: boolean, item?: ClipperDocumentInfo): void;
139
- /**
140
- * Open an item
141
- * This should be always overridden
142
- * @param documentId : the document id
143
- * @param query: the query string
144
- * @param newWindow: true if the document must be open into a new window
145
- */
146
- open(documentId: string | null | undefined, query?: string | null | undefined, newWindow?: boolean): void;
147
- /**
148
- * Open a document
149
- * @param documentId : the document id
150
- * @param query: the query string
151
- */
152
- openDocument(documentId: string | null | undefined, query?: string | null | undefined): void;
153
- /**
154
- * Open a references dialog
155
- * @param documentId : the document id
156
- * @param mode: the optional mode. Default is references in
157
- * @param model: the optional document model
158
- * @param anchor: the optional document anchor
159
- * @param anchorTitle: : the optional anchor title
160
- * @param update: true if is an update
161
- */
162
- openReferences(documentId: string | null, mode?: ClipperQueryReferencesMode | null, model?: number | null | undefined, anchor?: string | null | undefined, anchorTitle?: string | null | undefined, update?: boolean | null | undefined): void;
163
139
  /**
164
140
  * Save restorable data
165
141
  * @param id : the restorable id
@@ -5,8 +5,6 @@ import { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';
5
5
  import { ApplicationDialogService, SendToDialogComponent } from '@arsedizioni/ars-utils/ui.application';
6
6
  import saveAs from 'file-saver';
7
7
  import { ClipperDocumentsUtils } from '../../documents';
8
- import { ClipperReferencesComponent } from '../references/references.component';
9
- import { ClipperDocumentComponent } from '../document/document.component';
10
8
  import * as i0 from "@angular/core";
11
9
  export class ClipperDocumentManager {
12
10
  constructor() {
@@ -259,23 +257,7 @@ export class ClipperDocumentManager {
259
257
  * @param documentId : the document id
260
258
  * @param query: the query string
261
259
  */
262
- openDocument(documentId, query = null) {
263
- if (documentId) {
264
- this.dialogService.open(ClipperDocumentComponent, {
265
- ariaLabel: 'documento',
266
- autoFocus: false,
267
- restoreFocus: false,
268
- disableClose: false,
269
- data: {
270
- id: documentId,
271
- query: query
272
- },
273
- minWidth: '375px',
274
- maxWidth: '1400px',
275
- width: '99%',
276
- height: '99%'
277
- });
278
- }
260
+ openDocument(_documentId, _query = null) {
279
261
  }
280
262
  /**
281
263
  * Open a references dialog
@@ -286,32 +268,7 @@ export class ClipperDocumentManager {
286
268
  * @param anchorTitle: : the optional anchor title
287
269
  * @param update: true if is an update
288
270
  */
289
- openReferences(documentId, mode = ClipperQueryReferencesMode.ReferencesIn, model = null, anchor = null, anchorTitle = null, update = true) {
290
- console.log("OPENING 2");
291
- const d = this.dialogService.open(ClipperReferencesComponent, {
292
- ariaLabel: 'documento',
293
- autoFocus: false,
294
- restoreFocus: false,
295
- disableClose: false,
296
- data: {
297
- id: documentId,
298
- mode: mode,
299
- model: model,
300
- anchor: anchor,
301
- anchorTitle: anchorTitle,
302
- update: update,
303
- },
304
- minWidth: '375px',
305
- maxWidth: '1000px',
306
- width: '99%',
307
- height: '99%'
308
- });
309
- d.afterClosed()
310
- .subscribe((r) => {
311
- if (r && r.documentId) {
312
- this.open(r.documentId);
313
- }
314
- });
271
+ openReferences(_documentId, _mode = ClipperQueryReferencesMode.ReferencesIn, _model = null, _anchor = null, _anchorTitle = null, _update = true) {
315
272
  }
316
273
  /**
317
274
  * Manage clipper bag
@@ -425,11 +382,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
425
382
  args: [{
426
383
  template: '<div></div>',
427
384
  standalone: true,
428
- changeDetection: ChangeDetectionStrategy.OnPush,
429
- imports: [
430
- ClipperReferencesComponent,
431
- ClipperDocumentComponent
432
- ]
385
+ changeDetection: ChangeDetectionStrategy.OnPush
433
386
  }]
434
387
  }] });
435
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUF1QixlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0wsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMEJBQTBCLEVBQW1DLE1BQU0sb0NBQW9DLENBQUM7QUFDakgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBWTFFLE1BQU0sT0FBTyxzQkFBc0I7SUFUbkM7UUFXYyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0EyYTlEO0lBemFHOzs7R0FHRDtJQUNDLFNBQVMsQ0FBQyxJQUF5QjtRQUMv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QUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7O01BR0U7SUFDRixjQUFjLENBQUMsUUFBNkI7UUFDeEMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekYsQ0FBQzs4R0E3YVEsc0JBQXNCO2tHQUF0QixzQkFBc0Isd0VBUnJCLGFBQWE7OzJGQVFkLHNCQUFzQjtrQkFUbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUU7d0JBQ0wsMEJBQTBCO3dCQUMxQix3QkFBd0I7cUJBQzNCO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyTWVzc2FnZXMsIENsaXBwZXJNb2RlbCwgQ2xpcHBlck1vZHVsZSwgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJTZWFyY2hQYXJhbXMsIENsaXBwZXJTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IEJyb2FkY2FzdFNlcnZpY2UsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlLCBTZW5kVG9EaWFsb2dDb21wb25lbnQgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uJztcclxuaW1wb3J0IHNhdmVBcyBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50c1V0aWxzIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnRzJztcclxuaW1wb3J0IHsgQ2xpcHBlclJlZmVyZW5jZXNDb21wb25lbnQsIENsaXBwZXJSZWZlcmVuY2VEaWFsb2dDbG9zZUluZm8gfSBmcm9tICcuLi9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQvZG9jdW1lbnQuY29tcG9uZW50JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50LFxyXG4gICAgICAgIENsaXBwZXJEb2N1bWVudENvbXBvbmVudFxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWFuYWdlciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsaXBib2FyZCA9IGluamVjdChDbGlwYm9hcmQpO1xyXG4gICAgcHJvdGVjdGVkIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgICAvKipcclxuICogRXhwb3J0IGEgZG9jdW1lbnQgaW4gcGRmIGZvcm1hdFxyXG4gKiBAcGFyYW0gaXRlbSA6IHRoZSBkb2N1bWVudCB0byBleHBvcnRcclxuICovXHJcbiAgICBleHBvcnRQZGYoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5jb25maXJtKFwiQ29uZmVybWkgbCdlc3BvcnRhemlvbmU/XCIsICdBdHRlbnppb25lIScpXHJcbiAgICAgICAgICAgIC5jb21wb25lbnRJbnN0YW5jZS5jaG9vc2VuLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoci5yZXN1bHQgPT09ICdvaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW0uaWQgfHwgaXRlbS5kb2N1bWVudElkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdFc3BvcnRhemlvbmUgaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmV4cG9ydFBkZihpZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocjI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyMiwgKGl0ZW0udGl0bGUxID8gaXRlbS50aXRsZTEgOiBpZCkgKyAnLnBkZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYXZlIGN1cnJlbnQgZG9jdW1lbnQgbGlzdCBvciBqdXN0IHRoZSBzZWxlY3RlZCBkb2N1bWVudHMgYXMgYSBjc3ZcclxuICAgICAqIEBwYXJhbSBpdGVtczogdGhlIGl0ZW0gbGlzdFxyXG4gICAgICogQHBhcmFtIHNlYXJjaFBhcmFtczogdGhlIHNlYXJjaCBwYXJhbXNcclxuICAgICAqL1xyXG4gICAgZXhwb3J0SXRlbXMoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSwgc2VhcmNoUGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgbGV0IG1vZGVsOiBhbnkgPSB7IGlkczogaWRzLCBxdWVyeTogbnVsbCwgZm9ybWF0OiAxIH07XHJcbiAgICAgICAgaWYgKG1vZGVsLmlkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgbW9kZWwucXVlcnkgPSBzZWFyY2hQYXJhbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdTYWx2YXRhZ2dpbyBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuZXhwb3J0KG1vZGVsKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUFzKHIsICdlbGVuY28uY3N2Jyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJjaGl2ZSBhIGxpc3Qgb2YgaXRlbXNcclxuICAgICAqIEBwYXJhbSBpdGVtczogdGhlIGl0ZW0gbGlzdFxyXG4gICAgICovXHJcbiAgICBhZGRUb0FyY2hpdmUoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9BUkNISVZFX0FERCwgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGRlYWRsaW5lXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGFkZFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhbGVuZGFyKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQ0FMRU5EQVJfQURELCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICogQWRkIGEgbGlzdCBvZiBpdGVtcyB0byB3b3JraW5nIGRvY3VtZW50c1xyXG4gKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbSBsaXN0XHJcbiAqL1xyXG4gICAgYWRkSXRlbXNUb1dvcmtpbmdEb2N1bWVudHMoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9XT1JLSU5HX0FERCwgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4qIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbSBsaXN0XHJcbiovXHJcbiAgICBhZGRJdGVtc1RvQmFnKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5hZGRUb0JhZyhpZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBtZXRhZGF0YSB0byBjbGlwYm9hcmRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gY29weVxyXG4gICAgICovXHJcbiAgICBjb3B5TWV0YWRhdGFUb0NsaXBib2FyZChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtIHx8IGl0ZW0ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5Db29yZGluYW1lbnRvKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1ldGEgPVxyXG4gICAgICAgICAgICAoaXRlbS5pZCA/PyBpdGVtLmRvY3VtZW50SWQpICsgJ1xcdCcgK1xyXG4gICAgICAgICAgICBpdGVtLnRpdGxlMT8ucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIiBcIikgKyAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS50aXRsZTIpXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS50aXRsZTIucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIiBcIik7XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5udW1iZXIpXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5udW1iZXI7XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5wdWJsaXNoaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICBpdGVtLnB1Ymxpc2hpbmdEYXRlID0gbmV3IERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgICAgIG1ldGEgKz0gU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShpdGVtLnB1Ymxpc2hpbmdEYXRlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZGF0ZSkge1xyXG4gICAgICAgICAgICBpdGVtLmRhdGUgPSBuZXcgRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5vcmlnaW5EZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgbWV0YSArPSBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uXHJcbiAgICAgICAgdGhpcy5jbGlwYm9hcmQuY29weShtZXRhKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoXCJNZXRhZGF0aSBjb3BpYXRpIG5lZ2xpIGFwcHVudGkuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIGRvY3VtZW50IHBlcm1hbGlua1xyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBzaG93IHRoZSBsaW5rIGZvclxyXG4gICAgICovXHJcbiAgICBzaG93TGluayhpdGVtOiBhbnkpIHtcclxuICAgIFxyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuOyAgICAgICAgXHJcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xyXG4gICAgICAgIGxldCBpZCA9IGl0ZW0uaWQgPyBpdGVtLmlkIDogaXRlbS5kb2N1bWVudElkO1xyXG4gICAgICAgIGxldCBjaGFubmVscyA9IGl0ZW0uY2hhbm5lbE5hbWVcclxuICAgICAgICAgICAgPyAnQ2FuYWxpOiAnICsgaXRlbS5jaGFubmVsTmFtZSArICc8YnI+J1xyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIGxldCBvcmlnaW4gPSBpdGVtLm9yaWdpblxyXG4gICAgICAgICAgICA/ICdPcmlnaW5lOiAnICtcclxuICAgICAgICAgICAgaXRlbS5vcmlnaW4gK1xyXG4gICAgICAgICAgICAnIC0gJyArXHJcbiAgICAgICAgICAgIChpdGVtLm9yaWdpbkRlc2NyaXB0aW9uID8gaXRlbS5vcmlnaW5EZXNjcmlwdGlvbiA6ICcnKSArXHJcbiAgICAgICAgICAgICc8YnI+J1xyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIGxldCB0b3BpY3MgPSBpdGVtLnRvcGljcyA/ICdBcmdvbWVudG86ICcgKyBpdGVtLnRvcGljcyArICc8YnI+JyA6ICcnO1xyXG4gICAgICAgIGlmICghaWQpIHJldHVybjtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9XHJcbiAgICAgICAgICAgIFwiPHAgPklsIGxpbmsgY2hlIHRyb3ZpIHF1aSBzb3R0byDDqCB1biByaWZlcmltZW50byBkaXJldHRvIGFsIGRvY3VtZW50byBzZWxlemlvbmF0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxwID5MbyBwdW9pIHV0aWxpenphcmUgbmVsbGEgdHVhIGRvY3VtZW50YXppb25lIG8gaW52aWFybG8gcGVyIGVtYWlsIGFkIHVuIHR1byBjb2xsZWdhLiBMYSBwZXJzb25hIGNoZSBkZXNpZGVyZXLDoCB2aXN1YWxpenphcmUgaWwgZG9jdW1lbnRvIGRvdnLDoCBuZWNlc3NhcmlhbWVudGUgZXNzZXJlIHVuIHV0ZW50ZSBhYmJvbmF0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxwID5TZWxlemlvbmEgZSBjb3BpYSAoZmFpIENUUkwrQykgaWwgbGluayBxdWkgc290dG8uPC9wPlwiICtcclxuICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzbWFsbCBhY2NlbnQnPlwiICtcclxuICAgICAgICAgICAgJ2h0dHBzOi8vY2xpcHBlci5hcnNlZGl6aW9uaS5pdC8/aWQ9JyArXHJcbiAgICAgICAgICAgIGlkICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGJyPicgK1xyXG4gICAgICAgICAgICAnPGhyPicgK1xyXG4gICAgICAgICAgICAnPHAgY2xhc3M9XCJzbWFsbFwiPicgK1xyXG4gICAgICAgICAgICBjaGFubmVscyArXHJcbiAgICAgICAgICAgIG9yaWdpbiArXHJcbiAgICAgICAgICAgIHRvcGljc1xyXG4gICAgICAgICc8L3A+JztcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8obWVzc2FnZSwgJ0NvcGlhIGxpbmsnLCAnQ2hpdWRpJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIGRvY3VtZW50cyBsaW5rcyBieSBlbWFpbFxyXG4gICAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGRvY3VtZW50IGxpc3RcclxuICAgICAqL1xyXG4gICAgc2VuZEl0ZW1zVG8oaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgICBjb25zdCBkID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oU2VuZFRvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGFyaWFMYWJlbDogJ2ludmlhIGRvY3VtZW50aSBwZXIgZW1haWwnLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGluZm86XHJcbiAgICAgICAgICAgICAgICAgICAgJ1B1b2kgaW52aWFyZSBpIGRvY3VtZW50aSBhIGNoaSB2dW9pIG1hLCBwZXIgcG90ZXJsaSB2aXN1YWxpenphcmUsIMOoIG5lY2Vzc2FyaW8gZXNzZXJlIHVuIHV0ZW50ZSBhYmJvbmF0by4nLFxyXG4gICAgICAgICAgICAgICAgY291bnQ6IGl0ZW1zLmxlbmd0aCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiAnNjAwcHgnLFxyXG4gICAgICAgICAgICB3aWR0aDogJzk5JScsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZC5jb21wb25lbnRJbnN0YW5jZS5kb25lXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgci5pZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ0ludmlvIGluIGNvcnNvLi4uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnNlbmRUbyhyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocjI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyMi5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0ludmlvIGNvbXBsZXRhdG8gY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5IGEgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHRpdGxlOiB0aGUgZG9jdW1lbnQgc2hvcnQgdGl0bGVcclxuICAgICAqL1xyXG4gICAgb3BlblJlcG9ydChkb2N1bWVudElkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgICAgIENsaXBwZXJEb2N1bWVudHNVdGlscy5vcGVuUmVwb3J0KFxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UsXHJcbiAgICAgICAgICAgIGRvY3VtZW50SWQsXHJcbiAgICAgICAgICAgIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgYSBkb2N1bWVudCByZXBvcnRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIHJlcG9ydChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGl0ZW0ubW9kZWwgIT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgJiYgaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuU2NhZGVuemUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oXCJRdWVzdGEgZnVuemlvbmFsaXTDoCBub24gw6ggZGlzcG9uaWJpbGUgcGVyIHF1ZXN0byB0aXBvIGRpIGRvY3VtZW50by5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5SZXBvcnQoaXRlbS5kb2N1bWVudElkLCBpdGVtLnRpdGxlMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPcGVuIGFuIGl0ZW1cclxuICAgICogVGhpcyBzaG91bGQgYmUgYWx3YXlzIG92ZXJyaWRkZW5cclxuICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiAgICAqIEBwYXJhbSBuZXdXaW5kb3c6IHRydWUgaWYgdGhlIGRvY3VtZW50IG11c3QgYmUgb3BlbiBpbnRvIGEgbmV3IHdpbmRvd1xyXG4gICAgKi9cclxuICAgIG9wZW4oZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcXVlcnk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLCBuZXdXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghbmV3V2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbkRvY3VtZW50KGRvY3VtZW50SWQsIHF1ZXJ5KTtcclxuICAgICAgICB9IGVsc2Ugd2luZG93Lm9wZW4oJy9kb2N1bWVudG8vJyArIGRvY3VtZW50SWQsICdfYmxhbmsnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gYSBkb2N1bWVudFxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICAqIEBwYXJhbSBxdWVyeTogdGhlIHF1ZXJ5IHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBvcGVuRG9jdW1lbnQoZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcXVlcnk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlckRvY3VtZW50Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw6ICdkb2N1bWVudG8nLFxyXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBkb2N1bWVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcxNDAwcHgnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnOTklJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIGEgcmVmZXJlbmNlcyBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkICAgXHJcbiAgICAgKiBAcGFyYW0gbW9kZTogdGhlIG9wdGlvbmFsIG1vZGUuIERlZmF1bHQgaXMgcmVmZXJlbmNlcyBpblxyXG4gICAgICogQHBhcmFtIG1vZGVsOiB0aGUgb3B0aW9uYWwgZG9jdW1lbnQgbW9kZWxcclxuICAgICAqIEBwYXJhbSBhbmNob3I6IHRoZSBvcHRpb25hbCBkb2N1bWVudCBhbmNob3JcclxuICAgICAqIEBwYXJhbSBhbmNob3JUaXRsZTogOiB0aGUgb3B0aW9uYWwgYW5jaG9yIHRpdGxlXHJcbiAgICAgKiBAcGFyYW0gdXBkYXRlOiB0cnVlIGlmIGlzIGFuIHVwZGF0ZVxyXG4gICAgICovXHJcbiAgICBvcGVuUmVmZXJlbmNlcyhcclxuICAgICAgICBkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgICAgIG1vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlIHwgbnVsbCA9IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbixcclxuICAgICAgICBtb2RlbDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICAgICAgYW5jaG9yOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgICAgICBhbmNob3JUaXRsZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICAgICAgdXBkYXRlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJPUEVOSU5HIDJcIik7XHJcbiAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGFyaWFMYWJlbDogJ2RvY3VtZW50bycsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGlkOiBkb2N1bWVudElkLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogbW9kZSxcclxuICAgICAgICAgICAgICAgIG1vZGVsOiBtb2RlbCxcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogYW5jaG9yLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yVGl0bGU6IGFuY2hvclRpdGxlLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiB1cGRhdGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnOTklJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGQuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyOiBDbGlwcGVyUmVmZXJlbmNlRGlhbG9nQ2xvc2VJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAociAmJiByLmRvY3VtZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oci5kb2N1bWVudElkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYW5hZ2UgY2xpcHBlciBiYWdcclxuICAgICAqL1xyXG4gICAgb3BlbkJhZygpIHtcclxuICAgICAgICBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlbkJhZyhcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrcyBpZiBhIG1vZHVsZSBpcyBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICogQHBhcmFtIG1vZHVsZSA6IHRoZSBtb2R1bGUgdG8gY2hlY2tcclxuICAgICogQHJldHVybnM6IHRydWUgaWYgdGhlIG1vZHVsZSBpcyBzdXBwb3J0ZWRcclxuICAgICovXHJcbiAgICBpc01vZHVsZVN1cHBvcnRlZEJ5UlMobW9kdWxlOiBDbGlwcGVyTW9kdWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5HYXp6ZXR0ZUJvbGxldHRpbmlFRm9udGlEaXZlcnNlIHx8XHJcbiAgICAgICAgICAgIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5TY2FkZW56ZUVTZWduYWxhemlvbmk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYSBtb2RlbCBpcyBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICAqIEBwYXJhbSBtb2RlbCA6IHRoZSBtb2RlbCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnM6IHRydWUgaWYgdGhlIG1vZGVsIGlzIHN1cHBvcnRlZFxyXG4gICAgICovXHJcbiAgICBpc01vZGVsU3VwcG9ydGVkQnlSUyhtb2RlbDogQ2xpcHBlck1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2byB8fFxyXG4gICAgICAgICAgICBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgbW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpbnQgY3VycmVudCBkb2N1bWVudFxyXG4gICAgICovXHJcbiAgICBwcmludCgpIHtcclxuICAgICAgICBsZXQgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLWRvY3VtZW50LWlmcmFtZScpIGFzIGFueTtcclxuICAgICAgICBpZiAoZikge1xyXG4gICAgICAgICAgICBmLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoJ3tcInR5cGVcIjogXCJwcmludFwifScsICcqJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBpbiBjdXJyZW50IGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIGZpbmQoKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oJ1BlciBjZXJjYXJlIG5lbCBkb2N1bWVudG8gcHJlbWkgQ1RSTCArIEYuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrcyBpZiBhbGwgZG9jdW1lbnRzIGFyZSBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGxpc3Qgb2YgZG9jdW1lbnNcclxuICAgICogQHJldHVybnM6IHRydWUgaWYgYWxsIGRvY3VtZW50cyBzdXBwb3J0cyBSU1xyXG4gICAgKi9cclxuICAgIGNhblN1cHBvcnRSUyhpdGVtczogW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSB0aGlzLmlzTW9kZWxTdXBwb3J0ZWRCeVJTKG4ubW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93KSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbG93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIFJTIGlzIGVuYWJsZWQgZm9yIGFsbCBnaXZlbiBkb2N1bWVudHNcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudHMgOiB0aGUgZG9jdW1lbnRzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGFsbGEgZG9jdW1lbnRzIGFyIFJTIGVuYWJsZWRcclxuICAgICAqL1xyXG4gICAgUlNfZW5hYmxlZChkb2N1bWVudHM6IENsaXBwZXJEb2N1bWVudEluZm9bXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRzIHx8IGRvY3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBkb2N1bWVudHMuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSBuICYmIChuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICAgICAgbi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZSk7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3cpIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYWxsb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE5ldyBsYXdcclxuICAgICogQHBhcmFtIGRvY3VtZW50czogdGhlIGFycmF5IG9mIGRvY3VtZW50cyB0byBsaW5rIHRvIHRoZSBsYXdcclxuICAgICovXHJcbiAgICBSU19uZXdMYXcoZG9jdW1lbnRzOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX05FV19MQVcsIGRvY3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZXcgYWN0aXZpdHlcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudDogdGhlIGRvY3VtZW50IHRvIGxpbmsgdG8gdGhlIGFjdGl2aXR5XHJcbiAgICAgKi9cclxuICAgIFJTX25ld0FjdGl2aXR5KGRvY3VtZW50OiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfTkVXX0FDVElWSVRZLCBkb2N1bWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIERvY3VtZW50IHVzYWdlIHJlcG9ydFxyXG4gICAgKiBAcGFyYW0gZG9jdW1lbnQ6IHRoZSBsYXdcclxuICAgICovXHJcbiAgICBSU191c2FnZVJlcG9ydChkb2N1bWVudDogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX1VTQUdFX1JFUE9SVCwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUF1QixlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0wsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFReEQsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU9jLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQW9ZOUQ7SUFsWUc7OztHQUdEO0lBQ0MsU0FBUyxDQUFDLElBQXlCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLElB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QjtRQUN4QyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6RixDQUFDOzhHQXRZUSxzQkFBc0I7a0dBQXRCLHNCQUFzQix3RUFKckIsYUFBYTs7MkZBSWQsc0JBQXNCO2tCQUxsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyTWVzc2FnZXMsIENsaXBwZXJNb2RlbCwgQ2xpcHBlck1vZHVsZSwgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJTZWFyY2hQYXJhbXMsIENsaXBwZXJTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IEJyb2FkY2FzdFNlcnZpY2UsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlLCBTZW5kVG9EaWFsb2dDb21wb25lbnQgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uJztcclxuaW1wb3J0IHNhdmVBcyBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50c1V0aWxzIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnRzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyRG9jdW1lbnRNYW5hZ2VyIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY2xpcGJvYXJkID0gaW5qZWN0KENsaXBib2FyZCk7XHJcbiAgICBwcm90ZWN0ZWQgY2xpcHBlclNlcnZpY2UgPSBpbmplY3QoQ2xpcHBlclNlcnZpY2UpO1xyXG4gICAgcHJvdGVjdGVkIGJyb2FkY2FzdFNlcnZpY2UgPSBpbmplY3QoQnJvYWRjYXN0U2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZSA9IGluamVjdChBcHBsaWNhdGlvbkRpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICAgIC8qKlxyXG4gKiBFeHBvcnQgYSBkb2N1bWVudCBpbiBwZGYgZm9ybWF0XHJcbiAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50IHRvIGV4cG9ydFxyXG4gKi9cclxuICAgIGV4cG9ydFBkZihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmNvbmZpcm0oXCJDb25mZXJtaSBsJ2VzcG9ydGF6aW9uZT9cIiwgJ0F0dGVuemlvbmUhJylcclxuICAgICAgICAgICAgLmNvbXBvbmVudEluc3RhbmNlLmNob29zZW4uc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyLnJlc3VsdCA9PT0gJ29rJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbS5pZCB8fCBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ0VzcG9ydGF6aW9uZSBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuZXhwb3J0UGRmKGlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUFzKHIyLCAoaXRlbS50aXRsZTEgPyBpdGVtLnRpdGxlMSA6IGlkKSArICcucGRmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmUgY3VycmVudCBkb2N1bWVudCBsaXN0IG9yIGp1c3QgdGhlIHNlbGVjdGVkIGRvY3VtZW50cyBhcyBhIGNzdlxyXG4gICAgICogQHBhcmFtIGl0ZW1zOiB0aGUgaXRlbSBsaXN0XHJcbiAgICAgKiBAcGFyYW0gc2VhcmNoUGFyYW1zOiB0aGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgICovXHJcbiAgICBleHBvcnRJdGVtcyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdLCBzZWFyY2hQYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaWRzID0gaXRlbXM/Lm1hcChuID0+IG4uZG9jdW1lbnRJZCA/PyBuLmlkKSA/PyBbXTtcclxuICAgICAgICBsZXQgbW9kZWw6IGFueSA9IHsgaWRzOiBpZHMsIHF1ZXJ5OiBudWxsLCBmb3JtYXQ6IDEgfTtcclxuICAgICAgICBpZiAobW9kZWwuaWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBtb2RlbC5xdWVyeSA9IHNlYXJjaFBhcmFtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ1NhbHZhdGFnZ2lvIGluIGNvcnNvLi4uJyk7XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5leHBvcnQobW9kZWwpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzYXZlQXMociwgJ2VsZW5jby5jc3YnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcmNoaXZlIGEgbGlzdCBvZiBpdGVtc1xyXG4gICAgICogQHBhcmFtIGl0ZW1zOiB0aGUgaXRlbSBsaXN0XHJcbiAgICAgKi9cclxuICAgIGFkZFRvQXJjaGl2ZShpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0FSQ0hJVkVfQURELCBpdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBuZXcgZGVhZGxpbmVcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gYWRkXHJcbiAgICAgKi9cclxuICAgIGFkZFRvQ2FsZW5kYXIoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9DQUxFTkRBUl9BREQsIGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gKiBBZGQgYSBsaXN0IG9mIGl0ZW1zIHRvIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAqIEBwYXJhbSBpdGVtcyA6IHRoZSBpdGVtIGxpc3RcclxuICovXHJcbiAgICBhZGRJdGVtc1RvV29ya2luZ0RvY3VtZW50cyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX1dPUktJTkdfQURELCBpdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiogQWRkIGEgbGlzdCBvZiBpdGVtcyB0byB3b3JraW5nIGRvY3VtZW50c1xyXG4qIEBwYXJhbSBpdGVtcyA6IHRoZSBpdGVtIGxpc3RcclxuKi9cclxuICAgIGFkZEl0ZW1zVG9CYWcoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaWRzID0gaXRlbXM/Lm1hcChuID0+IG4uZG9jdW1lbnRJZCA/PyBuLmlkKSA/PyBbXTtcclxuICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmFkZFRvQmFnKGlkcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdPcGVyYXppb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLicpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IG1ldGFkYXRhIHRvIGNsaXBib2FyZFxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBjb3B5XHJcbiAgICAgKi9cclxuICAgIGNvcHlNZXRhZGF0YVRvQ2xpcGJvYXJkKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWl0ZW0gfHwgaXRlbS5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkNvb3JkaW5hbWVudG8pIHJldHVybjtcclxuICAgICAgICBsZXQgbWV0YSA9XHJcbiAgICAgICAgICAgIChpdGVtLmlkID8/IGl0ZW0uZG9jdW1lbnRJZCkgKyAnXFx0JyArXHJcbiAgICAgICAgICAgIGl0ZW0udGl0bGUxPy5yZXBsYWNlQWxsKFwiXFxyXFxuXCIsIFwiIFwiKSArICdcXHQnO1xyXG4gICAgICAgIGlmIChpdGVtLnRpdGxlMilcclxuICAgICAgICAgICAgbWV0YSArPSBpdGVtLnRpdGxlMi5yZXBsYWNlQWxsKFwiXFxyXFxuXCIsIFwiIFwiKTtcclxuICAgICAgICBtZXRhICs9ICdcXHQnO1xyXG4gICAgICAgIGlmIChpdGVtLm51bWJlcilcclxuICAgICAgICAgICAgbWV0YSArPSBpdGVtLm51bWJlcjtcclxuICAgICAgICBtZXRhICs9ICdcXHQnO1xyXG4gICAgICAgIGlmIChpdGVtLnB1Ymxpc2hpbmdEYXRlKSB7XHJcbiAgICAgICAgICAgIGl0ZW0ucHVibGlzaGluZ0RhdGUgPSBuZXcgRGF0ZShpdGVtLnB1Ymxpc2hpbmdEYXRlKTtcclxuICAgICAgICAgICAgbWV0YSArPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGl0ZW0ucHVibGlzaGluZ0RhdGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5kYXRlKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uZGF0ZSA9IG5ldyBEYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgICAgIG1ldGEgKz0gU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtZXRhICs9ICdcXHQnO1xyXG4gICAgICAgIGlmIChpdGVtLm9yaWdpbkRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0ub3JpZ2luRGVzY3JpcHRpb25cclxuICAgICAgICB0aGlzLmNsaXBib2FyZC5jb3B5KG1ldGEpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdChcIk1ldGFkYXRpIGNvcGlhdGkgbmVnbGkgYXBwdW50aS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgZG9jdW1lbnQgcGVybWFsaW5rXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIHNob3cgdGhlIGxpbmsgZm9yXHJcbiAgICAgKi9cclxuICAgIHNob3dMaW5rKGl0ZW06IGFueSkge1xyXG4gICAgXHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47ICAgICAgICBcclxuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShpdGVtKSk7XHJcbiAgICAgICAgbGV0IGlkID0gaXRlbS5pZCA/IGl0ZW0uaWQgOiBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgbGV0IGNoYW5uZWxzID0gaXRlbS5jaGFubmVsTmFtZVxyXG4gICAgICAgICAgICA/ICdDYW5hbGk6ICcgKyBpdGVtLmNoYW5uZWxOYW1lICsgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IG9yaWdpbiA9IGl0ZW0ub3JpZ2luXHJcbiAgICAgICAgICAgID8gJ09yaWdpbmU6ICcgK1xyXG4gICAgICAgICAgICBpdGVtLm9yaWdpbiArXHJcbiAgICAgICAgICAgICcgLSAnICtcclxuICAgICAgICAgICAgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gPyBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uIDogJycpICtcclxuICAgICAgICAgICAgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IHRvcGljcyA9IGl0ZW0udG9waWNzID8gJ0FyZ29tZW50bzogJyArIGl0ZW0udG9waWNzICsgJzxicj4nIDogJyc7XHJcbiAgICAgICAgaWYgKCFpZCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXNzYWdlID1cclxuICAgICAgICAgICAgXCI8cCA+SWwgbGluayBjaGUgdHJvdmkgcXVpIHNvdHRvIMOoIHVuIHJpZmVyaW1lbnRvIGRpcmV0dG8gYWwgZG9jdW1lbnRvIHNlbGV6aW9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPkxvIHB1b2kgdXRpbGl6emFyZSBuZWxsYSB0dWEgZG9jdW1lbnRhemlvbmUgbyBpbnZpYXJsbyBwZXIgZW1haWwgYWQgdW4gdHVvIGNvbGxlZ2EuIExhIHBlcnNvbmEgY2hlIGRlc2lkZXJlcsOgIHZpc3VhbGl6emFyZSBpbCBkb2N1bWVudG8gZG92csOgIG5lY2Vzc2FyaWFtZW50ZSBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPlNlbGV6aW9uYSBlIGNvcGlhIChmYWkgQ1RSTCtDKSBpbCBsaW5rIHF1aSBzb3R0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NtYWxsIGFjY2VudCc+XCIgK1xyXG4gICAgICAgICAgICAnaHR0cHM6Ly9jbGlwcGVyLmFyc2VkaXppb25pLml0Lz9pZD0nICtcclxuICAgICAgICAgICAgaWQgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8YnI+JyArXHJcbiAgICAgICAgICAgICc8aHI+JyArXHJcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInNtYWxsXCI+JyArXHJcbiAgICAgICAgICAgIGNoYW5uZWxzICtcclxuICAgICAgICAgICAgb3JpZ2luICtcclxuICAgICAgICAgICAgdG9waWNzXHJcbiAgICAgICAgJzwvcD4nO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhtZXNzYWdlLCAnQ29waWEgbGluaycsICdDaGl1ZGknKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbmQgZG9jdW1lbnRzIGxpbmtzIGJ5IGVtYWlsXHJcbiAgICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgZG9jdW1lbnQgbGlzdFxyXG4gICAgICovXHJcbiAgICBzZW5kSXRlbXNUbyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihTZW5kVG9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsOiAnaW52aWEgZG9jdW1lbnRpIHBlciBlbWFpbCcsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgaW5mbzpcclxuICAgICAgICAgICAgICAgICAgICAnUHVvaSBpbnZpYXJlIGkgZG9jdW1lbnRpIGEgY2hpIHZ1b2kgbWEsIHBlciBwb3RlcmxpIHZpc3VhbGl6emFyZSwgw6ggbmVjZXNzYXJpbyBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLicsXHJcbiAgICAgICAgICAgICAgICBjb3VudDogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByLmlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnSW52aW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VuZFRvKHIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IocjIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnSW52aW8gY29tcGxldGF0byBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgYSBkb2N1bWVudCByZXBvcnRcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICAgKiBAcGFyYW0gdGl0bGU6IHRoZSBkb2N1bWVudCBzaG9ydCB0aXRsZVxyXG4gICAgICovXHJcbiAgICBvcGVuUmVwb3J0KGRvY3VtZW50SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICAgICAgQ2xpcHBlckRvY3VtZW50c1V0aWxzLm9wZW5SZXBvcnQoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSxcclxuICAgICAgICAgICAgZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheSBhIGRvY3VtZW50IHJlcG9ydFxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgcmVwb3J0KGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICBpZiAoaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSAmJiBpdGVtLm1vZGVsICE9IENsaXBwZXJNb2RlbC5TY2FkZW56ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhcIlF1ZXN0YSBmdW56aW9uYWxpdMOgIG5vbiDDqCBkaXNwb25pYmlsZSBwZXIgcXVlc3RvIHRpcG8gZGkgZG9jdW1lbnRvLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblJlcG9ydChpdGVtLmRvY3VtZW50SWQsIGl0ZW0udGl0bGUxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9wZW4gYW4gaXRlbVxyXG4gICAgKiBUaGlzIHNob3VsZCBiZSBhbHdheXMgb3ZlcnJpZGRlblxyXG4gICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgKiBAcGFyYW0gcXVlcnk6IHRoZSBxdWVyeSBzdHJpbmdcclxuICAgICogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiAgICAqL1xyXG4gICAgb3Blbihkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBxdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsIG5ld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCFuZXdXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuRG9jdW1lbnQoZG9jdW1lbnRJZCwgcXVlcnkpO1xyXG4gICAgICAgIH0gZWxzZSB3aW5kb3cub3BlbignL2RvY3VtZW50by8nICsgZG9jdW1lbnRJZCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIGRvY3VtZW50XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIG9wZW5Eb2N1bWVudChcclxuICAgICAgICBfZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgXHJcbiAgICAgICAgX3F1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkgeyAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIHJlZmVyZW5jZXMgZGlhbG9nXHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZCAgIFxyXG4gICAgICogQHBhcmFtIG1vZGU6IHRoZSBvcHRpb25hbCBtb2RlLiBEZWZhdWx0IGlzIHJlZmVyZW5jZXMgaW5cclxuICAgICAqIEBwYXJhbSBtb2RlbDogdGhlIG9wdGlvbmFsIGRvY3VtZW50IG1vZGVsXHJcbiAgICAgKiBAcGFyYW0gYW5jaG9yOiB0aGUgb3B0aW9uYWwgZG9jdW1lbnQgYW5jaG9yXHJcbiAgICAgKiBAcGFyYW0gYW5jaG9yVGl0bGU6IDogdGhlIG9wdGlvbmFsIGFuY2hvciB0aXRsZVxyXG4gICAgICogQHBhcmFtIHVwZGF0ZTogdHJ1ZSBpZiBpcyBhbiB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgb3BlblJlZmVyZW5jZXMoXHJcbiAgICAgICAgX2RvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwsXHJcbiAgICAgICAgX21vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlIHwgbnVsbCA9IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbixcclxuICAgICAgICBfbW9kZWw6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgICAgIF9hbmNob3I6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgICAgIF9hbmNob3JUaXRsZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICAgICAgX3VwZGF0ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPSB0cnVlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYW5hZ2UgY2xpcHBlciBiYWdcclxuICAgICAqL1xyXG4gICAgb3BlbkJhZygpIHtcclxuICAgICAgICBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlbkJhZyhcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrcyBpZiBhIG1vZHVsZSBpcyBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICogQHBhcmFtIG1vZHVsZSA6IHRoZSBtb2R1bGUgdG8gY2hlY2tcclxuICAgICogQHJldHVybnM6IHRydWUgaWYgdGhlIG1vZHVsZSBpcyBzdXBwb3J0ZWRcclxuICAgICovXHJcbiAgICBpc01vZHVsZVN1cHBvcnRlZEJ5UlMobW9kdWxlOiBDbGlwcGVyTW9kdWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5HYXp6ZXR0ZUJvbGxldHRpbmlFRm9udGlEaXZlcnNlIHx8XHJcbiAgICAgICAgICAgIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5TY2FkZW56ZUVTZWduYWxhemlvbmk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYSBtb2RlbCBpcyBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICAqIEBwYXJhbSBtb2RlbCA6IHRoZSBtb2RlbCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnM6IHRydWUgaWYgdGhlIG1vZGVsIGlzIHN1cHBvcnRlZFxyXG4gICAgICovXHJcbiAgICBpc01vZGVsU3VwcG9ydGVkQnlSUyhtb2RlbDogQ2xpcHBlck1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2byB8fFxyXG4gICAgICAgICAgICBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgbW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpbnQgY3VycmVudCBkb2N1bWVudFxyXG4gICAgICovXHJcbiAgICBwcmludCgpIHtcclxuICAgICAgICBsZXQgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLWRvY3VtZW50LWlmcmFtZScpIGFzIGFueTtcclxuICAgICAgICBpZiAoZikge1xyXG4gICAgICAgICAgICBmLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoJ3tcInR5cGVcIjogXCJwcmludFwifScsICcqJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBpbiBjdXJyZW50IGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIGZpbmQoKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oJ1BlciBjZXJjYXJlIG5lbCBkb2N1bWVudG8gcHJlbWkgQ1RSTCArIEYuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrcyBpZiBhbGwgZG9jdW1lbnRzIGFyZSBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGxpc3Qgb2YgZG9jdW1lbnNcclxuICAgICogQHJldHVybnM6IHRydWUgaWYgYWxsIGRvY3VtZW50cyBzdXBwb3J0cyBSU1xyXG4gICAgKi9cclxuICAgIGNhblN1cHBvcnRSUyhpdGVtczogW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSB0aGlzLmlzTW9kZWxTdXBwb3J0ZWRCeVJTKG4ubW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93KSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbG93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIFJTIGlzIGVuYWJsZWQgZm9yIGFsbCBnaXZlbiBkb2N1bWVudHNcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudHMgOiB0aGUgZG9jdW1lbnRzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGFsbGEgZG9jdW1lbnRzIGFyIFJTIGVuYWJsZWRcclxuICAgICAqL1xyXG4gICAgUlNfZW5hYmxlZChkb2N1bWVudHM6IENsaXBwZXJEb2N1bWVudEluZm9bXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRzIHx8IGRvY3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBkb2N1bWVudHMuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSBuICYmIChuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICAgICAgbi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZSk7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3cpIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYWxsb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE5ldyBsYXdcclxuICAgICogQHBhcmFtIGRvY3VtZW50czogdGhlIGFycmF5IG9mIGRvY3VtZW50cyB0byBsaW5rIHRvIHRoZSBsYXdcclxuICAgICovXHJcbiAgICBSU19uZXdMYXcoZG9jdW1lbnRzOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX05FV19MQVcsIGRvY3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZXcgYWN0aXZpdHlcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudDogdGhlIGRvY3VtZW50IHRvIGxpbmsgdG8gdGhlIGFjdGl2aXR5XHJcbiAgICAgKi9cclxuICAgIFJTX25ld0FjdGl2aXR5KGRvY3VtZW50OiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfTkVXX0FDVElWSVRZLCBkb2N1bWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIERvY3VtZW50IHVzYWdlIHJlcG9ydFxyXG4gICAgKiBAcGFyYW0gZG9jdW1lbnQ6IHRoZSBsYXdcclxuICAgICovXHJcbiAgICBSU191c2FnZVJlcG9ydChkb2N1bWVudDogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX1VTQUdFX1JFUE9SVCwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19